适用于x64 / x86的WIX - 安全型号 - HKLM / HKCU

时间:2014-04-27 03:06:22

标签: windows-7 x86 wix 64-bit windows-installer

我正在使用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 - 保存是否需要类似的处理?

1 个答案:

答案 0 :(得分:2)

Windows Installer不支持“任何CPU”的概念。 MSI是特定于平台架构的。您需要一个x86 MSI和一个x64 MSI。这个(谷歌混合安装程序)有一些技巧,但你在这里和那里遇到限制,并最终编写不可取的自定义操作。

如果控制台应用程序是为任何CPU编译的.NET,我只需将其视为32位软件并安装到ProgramFilesFolder(x86)和32位注册表。它将作为32位应用程序安装,但它实际上作为64位进程运行没有问题。只需在您的应用程序代码中阅读注册表时,请务必从32位配置单元中读取以获取您的密钥。