Мы используем Wix Toolset V3.11 для построения нашей установки.
Из-за следующего объявления наш путь установки по умолчанию - C:/Program Files(x86)/Acme/AppName
.
<Property Id="ApplicationFolderName" Value="$(var.Manufacturer)\$(var.AppFolderName)" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />
С помощью кнопки «Дополнительно» в настройке мы изменяем этот путь на C:/Program Files(x86)/Acme/FooBar
:
СледующееОбъявление сохраняет измененный путь в реестре:
<RegistryKey
Key="Software\$(var.Manufacturer)\$(var.AppName)"
Root="HKLM">
<RegistryValue Id="InstallationRegistry"
Type="string"
Name="InstallDir"
Value="[APPLICATIONFOLDER]" />
</RegistryKey>
Через Regedit.exe я вижу путь C:/Program Files(x86)/Acme/FooBar
в реестре, как и ожидалось.Все хорошо.
Проблема: Но теперь, когда я запускаю новую установку, которая является обновлением, все файлы были перемещены из пользовательской папки C:/Program Files(x86)/Acme/FooBar
в папку по умолчанию C:/Program Files(x86)/Acme/AppName
.
Когда я выполняю обновление и нажимаю кнопку «Дополнительно», то по умолчанию заранее выделяется путь C:/Program Files(x86)/Acme/AppName
:
Я использую следующую разметку, чтобы запросить путь из реестра:
<Property Id="APPLICATIONFOLDER">
<RegistrySearch Id='InstallationRegistrySearch' Type='raw' Root='HKLM' Key='Software\$(var.Manufacturer)\$(var.AppName)' Name='InstallDir' />
</Property>
Вот соответствующая разметка:
<Fragment>
<ComponentGroup Id="RootComponents" Directory="APPLICATIONFOLDER">
<Component Id="RootComponent" Guid="xxxxxxxxx" Win64='yes'>
<RegistryKey
Key="Software\$(var.Manufacturer)\$(var.AppName)"
Root="HKLM">
<RegistryValue Id="InstallationRegistry"
Type="string"
Name="InstallDir"
Value="[APPLICATIONFOLDER]" />
</RegistryKey>
</Component>
</ComponentGroup>
[...]
<Product ...>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="PROGRAMFILESPATH" Name="$(var.ProgramFilesPath)">
<Directory Id="ManufacturerFolder" Name="$(var.Manufacturer)">
<Directory Id="APPLICATIONFOLDER" Name="$(var.AppFolderName)" >
<!-- here are the application files (e.g. Appname.exe)-->
[...]
</Directory>
</Directory>
</Directory>
</Directory>
[...]
<Property Id="ApplicationFolderName" Value="$(var.Manufacturer)\$(var.AppFolderName)" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />
<Property Id="APPLICATIONFOLDER">
<RegistrySearch Id='InstallationRegistrySearch' Type='raw' Root='HKLM' Key='Software\$(var.Manufacturer)\$(var.AppName)' Name='InstallDir' />
</Property>
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Property Id="ALLUSERS" Value="1"/>
[...]
<UI>
[...]
<UIRef Id="WixUI_Advanced"/>
</UI>
</Product>
Что мы делаем неправильно?