2013-05-17 2 views
0

Я выполняю следующие шаги, чтобы извлечь файл из MSI и отредактировать его и сохранить его обратно. Но когда я устанавливаю новый MSI, он не может найти файлы внутри шкафа (.cab).Обновление файла внутри существующего MSI

  1. Извлечь файл из кабины MSI

    msidb -d "Setup.msi" -x Client.cab

  2. Извлечь файл из кабины файла.

    cabarc X Client.cab *.* C:\ClientExtract\

  3. Редактировать извлеченный файл в папку C: \ ClientExtract

  4. Создать новый файл кабины из модифицированных файлов

    cabarc N Client.cab C:\ClientExtract\*.*

  5. Удалите существующую кабину от установки. МСИ

    msidb -d "Setup.msi" -k Client.cab

  6. Добавьте вновь созданный файл кабины для MSI

    msidb -d "Setup.msi" -a Client.cab

Теперь этот файл MSI не получает установлен и его говоря какой-то файл не найден. Когда я выполняю только шаги 1, 5 и 6, MSI работает плавно. Я считаю, что проблема будет с cabarc.exe, которая не в состоянии поддерживать структуру папок.

Любая помощь или альтернативное решение будет оценено по достоинству. msi2xml и xml2msi работает, но я не могу это использовать.

+0

Я тоже пробовал, но это не помогает – PawanS

+0

Да, я могу удалить файл кабины. Я имею в виду, что я удалил, а затем создал новый файл в шкафу. – PawanS

ответ

0

Поскольку вы отметили этот вопрос C#, я предлагаю написать библиотеку классов, используя библиотеки межсетевых интерфейсов DTF в качестве помощников. Это надежная платформа программирования по сравнению с пакетными файлами. Вы будете использовать сборки Microsoft.Deployment.WindowsInstaller и Microsoft.Deployment.Compression.Cab.

Способ, которым я предпочитаю это, - оставить только существующую кабину. Я создаю новую кабину и транслирую ее. Затем я обновляю таблицу «Файл и мультимедиа», чтобы зарегистрировать кабину и заменить исходный файл.

У меня есть стартовый код, который я мог бы использовать, если вы хотите снять мне электронное письмо.

+0

да, я согласен с вами, и я тоже начал кодирование на C#. Мой первый подход заключался в использовании инструментов WinSDk else C#. Пожалуйста, поделитесь своим кодом, это тоже поможет в моем коде. – PawanS

+0

Это полное решение проектов. Не то, что я могу просто вставить в ответ. Удалите меня по электронной почте (я легко найти) и загрузите необходимый SDK из wix.codeplex.com. –

+0

[email protected] – PawanS