2013-03-12 3 views
2

Я пытаюсь найти место установки, чтобы выполнить обновление, я использую установщик WiX, но я не могу использовать собственную механику обновления WiX, потому что он запускает файлы конфигурации и не выполняет проверки, которые происходят в пользовательском интерфейсе пользовательского действия.От GUID до полного пути

У меня есть bootstrapper, который вызывает .msi, и я могу легко получить и установить параметры внутри этого .msi.

В этой ситуации - как я могу получить из известного, но динамического GUID в местоположение файла его установки в загрузочном блоке перед запуском и запуском .msi.

N.B. Я не могу предположить, что файл конфигурации останется неизменным между установками или что я могу захватить файл быстрее, чем удаление может его убить.

ответ

3

У вас есть довольно простой контроль над механикой обновления, что вы должны быть в состоянии делать то, что хотите во время обновления. В частности, я бы попросил MSI прочитать настройки конфигурации, а затем записать их обратно в конфигурационный файл (ваш новый MSI определенно будет работать до удаления старого файла конфигурации). Это сделало бы вашу установку идемпотентной (идеальной).

Чтобы ответить на ваш вопрос, существует множество способов сделать то, что вы хотите. Далее, как я, вероятно, идти о нем:

  1. Написать ARPINSTALLLOCATION - это old blog entry of mine has details.

  2. Если вы знаете ProductCode вашего старого MSI, перейдите к шагу 3. Если вы не теперь ProductCode, а затем использовать UpgradeCode от MSI (вы будете знать, что если вы делаете обновление на всех) и используйте ::MsiEnumRelatedProducts(), чтобы найти ProductCode вашего ранее установленного MSI.

  3. Если вы знаете ProductCode вашего MSI, позвоните по номеру ::MsiGetProductInfo() и спросите об INSTALLPROPERTY_INSTALLLOCATION.

+0

Согласен. Я думаю, что ему действительно нужно помнить свойство. –

Смежные вопросы