我正在使用WIX 3.8并且我已经编写了一个32位控制台应用程序,我需要将其推广到32位和64位计算机 - 目标计算机类型有多种组合
Q1 - 是否有涵盖所有领域的模板,例如
86/64
Windows XP Vs Vista / 7/8(安全模式 - 管理员与非管理员)
perMachine(HKLM)Vs perUser(HKCU)
我已经就第三点提出了建议 - 我只是要发布一个perMachine安装程序,但是当我写入注册表(HKLM)时,安装程序很困惑,正在编写内容to HKLM(注意我可以写入HKCU,但这是因为安装程序默认执行为我的Windows 8机器上的非管理员) - 例如我如何概括 - 我已经尝试过
....
<Package...InstallScope="perMachine" />
...
<Feature Id='MainFeature' Level='1'>
<Component Directory='ApplicationFolder' Win64='yes'>
<Condition>VersionNT64</Condition>
<RegistryValue Root='HKLM' Key='SOFTWARE\xxxx\InstallProperties' Name='PidKey64' Value='[PIDKEY]' Type='string' />
<RemoveFolder Id='CleanupPidKey64' On='uninstall' />
</Component>
<Component Directory='ApplicationFolder'>
<RegistryValue Root='HKLM' Key='SOFTWARE\xxxx\InstallProperties' Name='PidKey' Value='[PIDKEY]' Type='string' />
<RemoveFolder Id='CleanupPidKey' On='uninstall' />
</Component>
</Feature>
...
但上述操作失败(此软件包包含64位组件&#39; ...&#39;但模板摘要属性不包含Intel64或x64)因为我没有
平台=&#34; 64&#34;
Package标签中的。
Q2 - 但是,如果我有一个x64属性的包标签,那么仅适用于x64计算机的安装程序,因此在同一个安装程序中使用x86是多余的。
此外,上面还有一个注册表项 - 还有一个保存
<Property Id="PIDKEY">
<RegistrySearch Id="SavePidKey" Root="HKLM"
Key="SOFTWARE\xxxx\InstallProperties"
Name="PidKey" Type="raw" />
</Property>
问题3 - 保存是否需要类似的处理?
答案 0 :(得分:2)
Windows Installer不支持“任何CPU”的概念。 MSI是特定于平台架构的。您需要一个x86 MSI和一个x64 MSI。这个(谷歌混合安装程序)有一些技巧,但你在这里和那里遇到限制,并最终编写不可取的自定义操作。
如果控制台应用程序是为任何CPU编译的.NET,我只需将其视为32位软件并安装到ProgramFilesFolder(x86)和32位注册表。它将作为32位应用程序安装,但它实际上作为64位进程运行没有问题。只需在您的应用程序代码中阅读注册表时,请务必从32位配置单元中读取以获取您的密钥。