Wix 在32位安装上以64位运行的自定义操作

Wix 在32位安装上以64位运行的自定义操作,wix,Wix,此应用程序是用于更大应用程序的插件。要完成安装,我们需要运行主应用程序提供的批处理脚本。批处理脚本错误表明某个注册表项不存在,但它存在于注册表的WOW6432部分中。似乎自定义操作正在以64位运行,试图在没有WOW6432的情况下获取注册表。我无法访问或控制批处理文件,因此我无法更改它以检查注册表的两个部分 如何确保自定义操作以32位运行 运行批处理文件时,cmd进程以64位模式运行 编辑:为了检查它是否运行64对32,我创建了一个单独的批处理脚本,用于检查HKLM/Software/SomeK

此应用程序是用于更大应用程序的插件。要完成安装,我们需要运行主应用程序提供的批处理脚本。批处理脚本错误表明某个注册表项不存在,但它存在于注册表的WOW6432部分中。似乎自定义操作正在以64位运行,试图在没有WOW6432的情况下获取注册表。我无法访问或控制批处理文件,因此我无法更改它以检查注册表的两个部分

如何确保自定义操作以32位运行

运行批处理文件时,cmd进程以64位模式运行

编辑:为了检查它是否运行64对32,我创建了一个单独的批处理脚本,用于检查HKLM/Software/SomeKey中的注册表项。密钥实际上位于HKLM/Software/Wow6432/SomeKey中。使用%windir%\SysWow64\cmd.exe任务管理器手动运行它时,会将此进程标记为*32正常工作。使用常规cmd.exe运行时,找不到注册表项。将此批处理文件作为自定义操作放在wix中会导致打开的非*32 cmd和regkey搜索失败

我在Wix中设置此批次,如下所示:

<CustomAction Id="batchCA" Property="BATCHFILE" ExeCommand="" Execute="deferred" />

其中BATCHFILE是设置BATCHFILE路径的属性。i、 e C:\temp\batch.cmd。它似乎运行正常,但我做错了吗?

您应该显式地将命令行exe指定为32位。因此,您应该使用以下命令,而不是像yourScriptName.cmd那样直接调用批处理:

%windir%\SysWoW64\cmd.exe /c yourScriptName.cmd

由于Windows Installer不直接支持批处理文件自定义操作,如果您指明如何配置此操作以运行,以及是什么使您相信它以64位运行,则可能会有所帮助。但在32位系统上,这将无法解决。有没有一种方法可以找到将被解析的cmd.exe而不考虑比特数?当您需要x64机器上cmd.exe的非默认路径时,恐怕没有。然后,您应该创建两个自定义操作,并配置何时启动每个操作的条件,或者仅在自定义操作中引用[SystemFolder]。在64位系统上,这始终是32位文件夹,也称为SysWow64: