wix安装程序平台依赖问题

时间:2014-05-22 06:45:06

标签: wix platform wix3.7

我正在尝试为x86和x64创建一个安装程序(一个MSI文件)。我希望安装过程只安装基于目标机器平台的相关文件。 直到现在我只有一个x86的MSI,它按预期工作。 现在我添加了这一部分:

   <!-- Details to support both x86 and x64 platforms-->
  <?if $(var.Platform) = x64 ?>
  <?define ProductName = "MyApp (64 bit)" ?>
  <?define Win64 = "yes" ?>
  <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
  <?define ExportReleaseComponentGroup  = "Export64ReleaseComponentGroup" ?>
  <?define MyApplication  = "$(var.x64SourcePath)\MyApp.exe" ?>
  <?else ?>
  <?define ProductName = "MyApp" ?>
  <?define Win64 = "no" ?>
  <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
  <?define ExportReleaseComponentGroup  = "Export32ReleaseComponentGroup" ?>
  <?define MyApplication  = "$(var.win32SourcePath)\MyApp.exe" ?>
  <?endif ?>

现在我遇到了一些错误:

  1. 在x64计算机中,它安装在Program Files(x86)文件夹下。我正在编译x86中的SetupProject,这可能是原因吗?相关代码:

    <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="$(var.PlatformProgramFilesFolder)">
    
  2. 安装结束时,应用程序不会运行。相关代码:

    <!--CA to launch the exe after install-->
    <Property Id="WixShellExecTarget" Value="$(var.MyApplication)" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
    
  3. 未创建桌面快捷方式和开始菜单快捷方式。相关代码:

    <Component Id="ProgramFilesShortcut" Guid="{My-Guid}">
        <Condition>MY_DESKTOP_SHORTCUT</Condition>
        <Shortcut Id="desktopMyApp" Directory="DesktopFolder" Name="MyApp" Target="$(var.MyApplication)" WorkingDirectory="bin" Icon="MyIcon.ico">
        </Shortcut>
        <RemoveFolder Id="ProgramFilesShortcut" On="uninstall" />
        <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="installed" Type="integer" Value="1" KeyPath="yes" />
    </Component>
    
    <Component Id="ProgramMenuDir" Guid="{My-Guid}">
        <Shortcut Id="startmenuMyApp" Directory="ProgramMenuFolder" Name="MyApp" Target="$(var.MyApplication)" Icon="MyIcon.ico" WorkingDirectory="bin" Arguments="-s">
    <!-- Set the AppID in order to get toasts to work -->
        <ShortcutProperty Key="System.AppUserModel.ID" Value="MyCompany.MyApp" />
        </Shortcut>
        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
        <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="installed" Type="integer" Value="1" KeyPath="yes" />
    </Component>
    
  4. 知道我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

您正在使用编译时变量,因此您要为32位或64位安装生成MSI。 MSI包必须以一个或另一个为目标。在某些情况下,它并不重要,但设计是在正确的位置获得重要的组件。

可以在单独的32位和64位版本之间共享源。

获得两个MSI后,您可以使用WiX Bootstrapper项目捆绑它们并在目标系统上安装相应的项目。