使用Platform属性构建WiX x86 / x64

时间:2012-03-30 07:42:57

标签: windows wix windows-installer wix3.5

我正在使用以下定义来根据构建环境使我的设置脚本变得灵活。

<?if $(var.Platform)=x64 ?>

<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define win64Flag = "yes"?>
<?define TargetConfigurationPath = "bin\x64\Release"?>

<?else ?>

<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define win64Flag = "no"?>
<?define TargetConfigurationPath = "bin\x86\Release"?>
<?endif ?>

详细介绍我在每个Win64组件属性中使用的win64Flag变量。我也在包“Platform”属性中使用Platform。 但是为了回到Win64属性,我以这种方式使用变量:

Win64="$(var.win64Flag)"

我总是收到警告,告诉我在YesNoType属性中使用此语句无效。

我正在使用candle.exe来构建这个东西:

candle.exe -ext WixUtilExtension -dPlatform=x86 "Deployment\WiX Setup Project\SetupScript.wxs" -out "Deployment\TempBuildOutput\SetupScript x86.wixobj"

light.exe -ext WixUIExtension -ext WixUtilExtension "Deployment\TempBuildOutput\SetupScript x86.wixobj" -out "Deployment\TempBuildOutput\Installer_x86.msi"

我的脚本中有一些CustomAction,如果安装完成,它会自动启动一个应用程序。这适用于x64版本,但不适用于x86版本。 这就是为什么我认为Win64属性可能有问题,或者更好,我使用它的方式。

但根据我的想法,这段代码必须正确,因为文件安装在x64(Program Files)和x86(Program Files(x86))上的相应文件夹中。但是我问自己,我的应用程序在安装完成后没有启动的原因是什么。

我正在使用x64 Windows,这可能导致我无法启动x86自动启动应用程序吗?

有没有办法解决使用Win64属性时的警告?

1 个答案:

答案 0 :(得分:2)

我无法告诉您为什么您的应用在安装完成后没有启动而没有更多信息来诊断问题,但我可以告诉您为什么您收到有关无效属性的警告。

Visual Studio会生成无效属性警告,如果您要在命令行上编译项目,则看不到警告。如果Visual Studio XML编辑器识别XML文档的架构,它将执行自动XML架构验证。 Wix XML模式将Win64属性允许的值定义为yesno。 Visual Studio发现您没有其中一个值,并且让您知道您没有遵守定义的架构。另一方面,Wix首先对文档进行预处理,并使用您在包含文件中定义的值替换违规值,这样文档就会通过模式验证。

简而言之,此警告可能不是您所看到问题的原因。