WIX Win64 =“ no”无效

时间:2019-04-07 08:29:27

标签: wix

我在安装程序中具有以下组件

  <Component Id="my.dll" Guid="*" Win64="no">
    <File Id="my.dll" Name="my.dll" KeyPath="yes" ReadOnly="yes" DiskId="1" Source="$(var.TargetDir)/my.dll" />
  </Component>

在用于解决方案平台x64的Visual Studio配置管理器中,安装程序项目设置为x64。

在构建x64时,尽管my.dll设置为“ Win64”,但在此部分上构建仍会失败,正在寻找no

在wixproj中,我通过复制x86部分来手动添加:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
  <OutputPath>bin\$(Configuration)\</OutputPath>
  <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
  <DefineConstants>Debug</DefineConstants>
</PropertyGroup>

'Release|x64'相同。并尝试删除以下内容:

<Platform Condition=" '$(Platform)' == '' ">x86</Platform>

,也将x86更改为x64,但这无济于事。

尽管x64为什么Win64="no"仍在此行上构建?

1 个答案:

答案 0 :(得分:0)

  

参考 Using Project References and Variables


TargetPath :也许尝试使用 $(var.ProjectName.TargetPath) 而不是 $(var.TargetDir)/my.dll 。我认为那是错的。 TargetPath将是您构建的文件名的完整路径。有关所有这些参数(预处理器变量),请参见上面的“ 参考”链接。


其他说明 :还有两件事:

  • 注意 ProjectName 部分:如果您的 Visual Studio项目被称为 MyLittleProject ,则应添加: $(var.MyLittleProject.TargetPath)
  • Wii文件中Component元素的
  • Win64="no" 属性会影响文件在最终用户安装发生的目标系统上的安装位置,而不是Visual Studio构建文件的位置成功构建后在磁盘上:
    • Program Files (x86) (32位)或 Program Files (64位)
    • Windows (64位)或 SysWOW64 (32位,不错)

快速示例 :这是从内存中提取的,可能不是很好,但这是实际使用的预处理器变量的示例(got this long answer on such constructs):

<?if $(var.MyProjectName.Platform) = "x64" ?>      
  <Component>
     <File Source="C:\Test\Test1.exe" />
  </Component>
<?endif?>

<?if $(var.MyProjectName.Platform) = "Win32" ?>
  <Component>
     <File Source="C:\Test\Test2.exe" />
  </Component>
<?endif?>

<Component>
   <File Source="$(var.MyProjectName.TargetPath)" />
</Component>

确保配置已设置为重建所有项目,包括WiX项目。可能会有意外的排除。请注意,平台对平台的说法是 Win32 x64 (而不是可能预期的 x86 )-常见错误。 Inspect the compiled MSI 。另外,请确保设置正确的项目构建顺序(处理项目依赖项)。


sys.BUILDARCH :还有 sys.BUILDARCH 内置变量,这让我有些困惑诚实。我没有用过。在这里搜索:Preprocessor。还有github