Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.77.149] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Есть работающая инсталляция, которая может быть установлена явно, а может накатывается как minor update (из командной строки вызывается msiexec /i "Setup.msi" REINSTALL=FeatureName1,FeatureName2 REINSTALLMODE=va /l*v Log.txt). Всё работает, если в новой версии нет удаления компонент (Component). Но в очередной версии инсталлятора это случилось: одна из компонент была удалена. При этом не обновилась вся фича (Feature), в которую входил данный компонент (в логе написалось что-то типа MSI (s) (38:98) [12:01:21:992]: Feature: Feature1; Installed: Absent; Request: Null; Action: Null). Вопрос: можно ли что-то сделать, чтобы minor update нормально отрабатывал в этой ситуации (пусть даже не удалял бы этот компонент, а просто обновлял бы другие компоненты этой фичи и добавлял новые). З.Ы. Я знаю, что в msdn написано, что minor update, small update и патчи не поддерживают удаление компонент из фич, но очень не хочется всё переделывать... З.Ы.2. Если это всё же невозможно, подскажите, пжлта, как ещё можно организовать переустановку продукта, чтобы не пришлось вводить заново все параметры (проходить по всем диалогам), ибо их очень долго заново заполнять. |
Сообщ.
#2
,
|
|
|
Ну в MSDN пишут
A minor upgrade can be used to add new features and components but cannot reorganize the feature-component tree. Цитата kong83 @ Если это всё же невозможно, подскажите, пжлта, как ещё можно организовать переустановку продукта, чтобы не пришлось вводить заново все параметры (проходить по всем диалогам), ибо их очень долго заново заполнять. Думаю Major Upgrade тебе поможет. |
Сообщ.
#3
,
|
|
|
При Major Upgrade у меня возникло две проблемы:
1. Несмотря на то, что я не меняю UpgradeCode и название продукта, меняю ProductionCode и увеличиваю версию - инсталляция не находит предыдущей версии и, соответственно, не удаляет её. Получается, что в Установке/Удалении программ накапливаются установленные разные версии моей программы. 2. От меня при установке требуют ввести заново все параметры, а этого хотелось бы избежать. Может быть есть какой-то финт ушами, чтобы при major update всего этого добиться? |
Сообщ.
#4
,
|
|
|
Цитата kong83 @ 1. Несмотря на то, что я не меняю UpgradeCode и название продукта, меняю ProductionCode и увеличиваю версию - инсталляция не находит предыдущей версии и, соответственно, не удаляет её. Получается, что в Установке/Удалении программ накапливаются установленные разные версии моей программы. Проверь, правильно ли ты заполнил таблицу Upgrade и не забудь, что имя проперти нужно внести в SecureCustomProperties. Кроме того, в секвенция должно быть действие FindRelatedProducts. Цитата kong83 @ 2. От меня при установке требуют ввести заново все параметры, а этого хотелось бы избежать. Может быть есть какой-то финт ушами, чтобы при major update всего этого добиться? Я так понимаю, что это настройки твоей программы, которые хранятся либо на файловой системе, либо в реестре. Следовательно нужно сделать 2 вещи: 1) при major update не удалять настройки (тут недавно был топик на эту тему) 2) при major update не показывать диалоги, в которых надо вводить параметры. |
Сообщ.
#5
,
|
|
|
Я вроде справился со всеми трудностями, поджидавшими меня на тернистом пути обновления продукта. Осталась ещё одна сложность. Если первую версию установить в каталог не по умолчанию, а потом накатить major update - то он удалит старую версию правильно, но новую поставит в каталог по умолчанию.
Не хотелось бы сохранять пути в реестр (как то это не круто выглядит). Может есть нормальный способ сделать так, чтобы новая версия ставилась в правильный каталог? Вот моя тестовая инсталляция. Может быть кто-нибудь подпишет то, чего ей не хватает? <?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <?define ProductVersion="1.1.0.0" ?> <Product Id="{A7C22D25-C4F2-4d8f-80B6-0B0D1C14D87A}" Name="Test Product" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Confirmit" UpgradeCode="{CC00BF47-7CBF-4bde-8FA1-905FA1916B1E}"> <Package InstallerVersion="200" Description="Test installer" Comments="Create table in database" Compressed="yes" /> <Upgrade Id="{CC00BF47-7CBF-4bde-8FA1-905FA1916B1E}"> <UpgradeVersion Minimum="$(var.ProductVersion)" IncludeMinimum="no" OnlyDetect="yes" Language="1033" Property="NEWPRODUCTFOUND" /> <UpgradeVersion Minimum="1.0.0.0" IncludeMinimum="yes" Maximum="$(var.ProductVersion)" IncludeMaximum="no" Language="1033" Property="UPGRADEFOUND" /> </Upgrade> <Property Id="NEWPRODUCTFOUND" Secure="yes" /> <Property Id="UPGRADEFOUND" Secure="yes" /> <Media Id="1" Cabinet="wixproj.cab" EmbedCab="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLLOCATION" Name="Test Product Location"> <Component Id='RemoveFiles' Guid='{DA838355-C9B3-4e02-8E9B-B91A0E39C79C}' DiskId='1' Feature='Complete'> <Condition><![CDATA[NOT UPGRADINGPRODUCTCODE]]></Condition> <RemoveFile Id='Remove_Web.config' Name='Web.config' On='uninstall' /> </Component> <Component Id="Component1" Guid="{9A1E9BCC-A730-40a7-9DBA-3D6424732978}" DiskId="1" Permanent="yes" Feature="Complete"> <Condition><![CDATA[NOT UPGRADEFOUND]]></Condition> <File Id="FirstDetailsFeature_File1" Name="Web.config" Source="WebCP.config" /> </Component> <Component Id="Component2" Guid="{0BD1FDD9-7AC5-4042-803C-9CF3741BAC4D}" DiskId="1" Feature="Complete"> <File Id="FirstFeature_File1" Name="File.txt" Source="WebCP.config" /> </Component> </Directory> </Directory> </Directory> <Feature Id="Complete" Title="Complete" Description="Complete package" Level="1" Display="expand" ConfigurableDirectory="INSTALLLOCATION" > </Feature> <UIRef Id="WixUI" /> <UIRef Id="WixUI_ErrorProgressText" /> <!-- Prevent downgrading --> <CustomAction Id="PreventDowngrading" Error="Newer version already installed." /> <!-- Sequences --> <InstallExecuteSequence> <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> <RemoveExistingProducts After="InstallFinalize" /> </InstallExecuteSequence> <InstallUISequence> <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> </InstallUISequence> </Product> </Wix> Для того, чтобы накатить major update надо увеличить версию и изменить {A7C22D25-C4F2-4d8f-80B6-0B0D1C14D87A} на другой гуид. Ещё можно изменить <Component Id="Component2" Guid="{0BD1FDD9-7AC5-4042-803C-9CF3741BAC4D}" DiskId="1" Feature="Complete"> <File Id="FirstFeature_File1" Name="File.txt" Source="WebCP.config" /> </Component> на <Component Id="Component2" Guid="{0BD1FDD9-7AC5-4042-123C-9CF3741BAC4D}" DiskId="1" Feature="Complete"> <File Id="FirstFeature_File1" Name="NewFile.txt" Source="WebCP.config" /> </Component> И поменять содержимое файла WebCP.config. После обновления файл File.txt заменится на NewFile.txt. А Web.config останется неизменным. А при деинсталляции все файлы будут удалены. Честно говоря, не знаю, насколько такой подход верен. Но работает. Если будут замечания, готов обсудить. |
Сообщ.
#6
,
|
|
|
Неужто никто не сталкивался с major update, когда установка по умолчанию изменена?
Может быть можно каким-нибудь стандартным способом получить пути установки от предыдущей инсталляции? |
Сообщ.
#7
,
|
|
|
В совсем старом инсталлере мы сохраняли путь в реестре.
В более новом у нас был самописный bootstrapper, который контролировал весь процесс установки и апгрейда. (вобщем-то MSI только файлы копировал ) В совсем новом либо все работает, либо никто не тестировал |
Сообщ.
#8
,
|
|
|
Такая же проблема,
Удаляет он из InstallDir (D:\tst_install) Ставит по умолчанию в C:\ProgramFiles\tst_install Побороть пока не вышло - может подскажете пожалуйста? |
Сообщ.
#9
,
|
|
|
Цитата Karayo @ Такая же проблема, Удаляет он из InstallDir (D:\tst_install) Ставит по умолчанию в C:\ProgramFiles\tst_install Побороть пока не вышло - может подскажете пожалуйста? Cходу на ум пришло только сохранять директорию, куда была установлена программа в конфиг, а при вызове апдейтера устанавливать ее с помощью CustomAction, забирая строку из конфига. |
Сообщ.
#10
,
|
|
|
Спасибо!
Попробую - как что выйдет отпишусь. |
Сообщ.
#11
,
|
|
|
Цитата seryal @ A minor upgrade can be used to add new features and components but cannot reorganize the feature-component tree. а если мне нужно поменять директорию компонент, это будет рассмотрено как reorganize the feature-component tree? Мне нужно положить файл на один уровень глубже, т.е. например, файл копировался в директорию installlocation, а теперь нужно, чтоб он лежал в installlocation\x64? Благодарю |