2015-02-05 2 views
1

Я хочу иметь 2 установщика с общей частью. Поэтому я использовал модуль слияния и создал 2 установщика wix.Общий компонент WiX как модуль слияния и INSTALLDIR из реестра

Вот что я хочу для того чтобы достигнуть более подробно (проблема описана там была решена): wix installers with common component

Я использую WixUI_InstallDir так что пользователь может выбрать каталог, в котором будет установлено приложение. Когда второй установщик запущен, я хочу загрузить ранее выбранный каталог установки.

Когда пользователь не меняет путь по умолчанию, все работает нормально. Но если в первой установке был изменен INSTALLDIR, то второй установщик добавляет плагин в правый путь, но также извлекает основной путь по умолчанию - что неправильно. Однако правильный путь (из предыдущей установки) отображается в диалоговом окне «Целевая папка».

Здесь значителен код:

<Property Id="CORE_INSTALLATION_PATH"> 
    <RegistrySearch Id="InstallFolderRegistrySearch" Type="raw" Root="HKLM" Key="SOFTWARE\PluginCompany\Plugins" Name="InstallFolder"/> 
</Property> 

<SetDirectory Id="INSTALLDIR" Value="[CORE_INSTALLATION_PATH]">CORE_INSTALLATION_PATH</SetDirectory> 

<DirectoryRef Id="TARGETDIR"> 
    <Component Id="CoreRegistryEntries" Guid="{C1701385-12CA-47EF-9FB2-884139B56390}"> 
    <RegistryKey Root="HKLM" Key="SOFTWARE\PluginCompany\Plugins" Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Name="InstallFolder" Value="[INSTALLDIR]" KeyPath="yes"/> 
    </RegistryKey> 
    </Component> 
</DirectoryRef> 

Вы можете загрузить и запустить полное решение образца от https://github.com/bwojdyla/wixplugins/tree/04f61b89b0465311818bec1cc06371b3dced5671

ответ

1

В журналах я нашел это:

MSI (c) (38:CC) [08:54:03:324]: Dir (target): Key: INSTALLDIR , Object: C:\Program Files (x86)\PluginCompanyFolder\PluginInstaller2\ 
MSI (c) (38:CC) [08:54:03:324]: Dir (target): Key: INSTALLDIR.751E70EB_CF76_413B_B8C8_231A31F9C946 , Object: C:\Program Files (x86)\PluginCompanyFolder\PluginInstaller\ 

Таким образом, есть два свойства INSTALLDIR и INSTALLDIR с GUID. Это второе свойство добавляется модулем слияния и обновление INSTALLDIR не меняет второе свойство. Вот почему основные компоненты были извлечены в пользовательское местоположение вторым установщиком.

Чтобы отключить mudularization я использовал атрибут SuppressModularization:

<Property Id="INSTALLDIR" SuppressModularization="yes"/> 

Примечание описания SuppressModularization на: http://wixtoolset.org/documentation/manual/v3/xsd/wix/property.html

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

0

пара или три вещи:

  1. Убедитесь, что правильный реестр , возможно, вам нужен поиск по Win64, возможно, нет, зависит от того, находятся ли данные в собственном реестре или в x86 WOW.

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

  3. Сделайте установку с подробным журналом и посмотрите, что делает приложение AppSearch - это то, где он установит (или не) это значение свойства. Вот где вы увидите, установлено ли свойство или нет, и, следовательно, произойдет ли что-то еще позже.

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