在一个.wxs文件中包含注册表项的问题,以创建32位和64位安装程序

问题描述 投票:0回答:1

这是我的剧本:

<DirectoryRef Id="TARGETDIR">
      <!--for 64 bit platform-->
      <?if $(sys.BUILDARCH)="x64"?>
        <Component Id="RegistryEntries64" Guid="EFC1C5ED-0BC8-4B52-943A-BFF5F3136B4F" Win64="yes">
          <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers">
            <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed" KeyPath="yes"/>
          </RegistryKey>
          <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)">
           <-------/>
          </RegistryKey>
          <RemoveFolder Id="RegistryEntries64" On="uninstall"/>
        </Component>
      <?else?>
        <!--for 32 bit platform-->
        <Component Id="RegistryEntries86" Guid="E37BE3EF-1979-4C56-A768-2D6B6AB99870" Win64="no">
            <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers">
              <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed"/>
            </RegistryKey>
            <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)">
              <----->
            </RegistryKey>
          <RemoveFolder Id="RegistryEntries86" On="uninstall"/>
         </Component>
       <?endif?>

    </DirectoryRef>

使用此脚本创建的32位安装程序(在Visual Studio 2015中为x86平台选择)可以在64位操作系统的计算机上正常工作,在WOW6432Node内部创建了注册表项,基本上这是要在64位计算机上安装的32位安装程序,因此用户可以在64位计算机上安装64位和32位安装程序,但在32位操作系统上,注册表项应位于SOFTWARE \ ODBC \ ODBCINST.INI \ ODBC Drivers中。在32位计算机上,Get-OdbcDriver命令不会返回列表中的驱动程序。Wix本身不建议平台变量sys.BUILDARCH获取目标平台类型。我是否需要为32位操作系统的计算机编写单独的脚本,并在其中给注册表项SOFTWARE \ ODBC \ ODBCINST.INI \ ODBC Drivers?还是有其他解决方案?我在互联网上看了太多stackoverflow帖子和其他帖子,但找不到与此相关的内容。在此先感谢

wix3.7
1个回答
0
投票
您无需为此创建单独的脚本。一种可能的解决方案是定义另一个变量(即Installer_x86_x86),然后根据其值为64位和32位OS创建32位安装程序。

<?if $(var.Installer_x86_x86)="no"?> <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers"> <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed"/> </RegistryKey> <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)"> <RegistryValue Type="string" Name="Description" Value="TIBCO ComputeDB ODBC Driver" /> </RegistryKey> <?else?> <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"> <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed"/> </RegistryKey> <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)"> <RegistryValue Type="string" Name="Description" Value="TIBCO ComputeDB ODBC Driver" /> </RegistryKey> <?endif?>

© www.soinside.com 2019 - 2024. All rights reserved.