2012-03-30 36 views
3

我正在使用以下define来根据构建环境灵活地设置我的安装脚本。使用平台属性构建WiX x86/x64

<?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变量。我也在软件包“平台”属性中使用平台。 但要获得回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属性的警告?

回答

2

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

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

总之,这个警告可能不是你所看到的问题的原因。