2

这个应用程序是一个更大的应用程序的插件。要完成我们的安装,我们需要运行主应用程序提供的批处理脚本。批处理脚本错误说某个注册表项不存在,但它存在于注册表的 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 是设置批处理文件路径的属性。即“C:\temp\batch.cmd”。它似乎运行良好,但我做错了吗?

4

1 回答 1

0

您应该明确指定命令行 exe 为 32 位。因此,不要像“yourScriptName.cmd”那样直接调用你的批处理,你应该使用这个:

%windir%\SysWoW64\cmd.exe /c yourScriptName.cmd
于 2012-11-06T13:11:30.580 回答