Я пытаюсь создать установщик WiX для плагина одного из моих приложений, но натолкнулся на то, что я нахожу странным; возможно, это ожидаемое поведение, но тогда я хотел бы знать, почему.WiX извлекает путь из путаницы реестра
Мое приложение сохраняет свой путь установки в следующем разделе реестра:
HKEY_CURRENT_USER \ SOFTWARE \ MyCompany \ MyApp \ Installed
По умолчанию мое приложение устанавливается в C: \ Program Files \ MyApp, если x64 и C: \ Program Files (x86) \ MyApp, если x86.
В моем плагине установщиком я следующее Product.wxs, чтобы получить путь установки моего приложения:
<Property Id="MY_APP_DIR">
<RegistrySearch Id='my_app_dir' Type='raw' Root='HKCU' Key='SOFTWARE\MyCompany\MyApp' Name='Installed' />
</Property>
Затем я добавил следующее, чтобы посмотреть, что на самом деле извлекается при запуске программы установки:
<Condition Message="[MY_APP_DIR]">
0
</Condition>
в случае, когда «C: \ Program Files \ MyApp \» хранится в реестре, я получил следующее при запуске программы установки плагина:
плагин в Staller (x86): C: \ Program Files (x86) \ MyApp \
Plugin инсталлятор (x64): C: \ Program Files \ MyApp \
Почему не значение хранится в реестре извлекается независимо на какой платформе был создан msi?
На машине x64 будут использоваться только 64-разрядные версии моих установщиков, поэтому это не должно вызывать никаких проблем, это просто смущает меня.
EDIT: В соответствии с просьбой, я включил весь мой Product.wxs:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="TestInstaller" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="SOME_GUID">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />
<Property Id="MY_APP_DIR">
<RegistrySearch Id="my_app_dir" Root="HKCU" Key="SOFTWARE\MyCompany\MyApp" Name="Installed" Type="raw" />
</Property>
<Condition Message="[MY_APP_DIR]">
0
</Condition>
<Feature Id="ProductFeature" Title="TestInstaller" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLFOLDER" Name="TestInstaller">
<Directory Id="MY_APP_DIR" Name="MyAppInstallPath">
<Directory Id="MyAppBinFolder" Name="bin" />
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents">
<Component Id="ProductComponent" Guid="SOME_GUID" Directory="MyAppBinFolder">
<File Id="Foo.Bar" Source="Foo.Bar" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
Не могли бы вы предоставить более подробную информацию о том, как «MY_APP_DIR» используется в вашем установщике WiX? Например, он ссылается на элемент «Directory»? – bradfordrg
@bradfordrg У меня нет кода со мной прямо сейчас, но да, я использую его в элементе Directory. Как прямой дочерний элемент в элементе '', если я правильно помню. –
dbostream