WiX使用Platform属性进行x86 / x64构建

3
我使用以下定义来使我的设置脚本根据构建环境更加灵活。
<?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 ?>

详细来讲,我关注的是win64Flag变量,我在每个组件的Win64属性中都使用它。我也在“包”中使用“平台”属性。 但是回到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个回答

3
我无法确定您的应用程序安装完成后为什么无法启动,需要更多信息来诊断问题,但我可以告诉您为什么会收到“属性无效”的警告。
如果在命令行上编译项目,则不会看到Visual Studio发出的“属性无效”警告。如果Visual Studio识别XML文档的模式,则会自动进行XML模式验证。Wix XML模式将Win64属性允许的值定义为yesno。 Visual Studio发现您没有使用这些值,并友好地提醒您未遵循已定义的模式。然而,Wix首先对文档进行预处理,并将有问题的值替换为包含文件中定义的值,从而使文档通过模式验证。
简而言之,此警告可能不是您看到的问题的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接