2012-11-05 110 views
1

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

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

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

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

我设置此批维克斯是这样的:

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

如果批处理文件是一个属性设置的批处理文件的路径。即“C:\ temp \ batch.cmd”。它似乎运行良好,但我做错了吗?

+0

由于Windows安装程序不直接支持批处理文件自定义操作,它可能会帮助:因此,而不是直接调用批处理像“yourScriptName.cmd”,你应该使用这个,什么让你相信它是以64位运行的。 –

回答

0

您应该明确指定命令行exe为32位。如果你指出你如何配置它来运行

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

但是这在32位系统上将无法解决。有没有办法找到cmd.exe将被解决而不管比特率? – SaulBack

+1

当你在x64机器上需要cmd.exe的非默认路径时,恐怕没有。您应该创建2个自定义操作,然后配置条件以启动每个自定义操作 –

+2

或者仅引用自定义操作中的[SystemFolder]。这总是32位文件夹(在64位系统上也称为SysWow64):http://msdn.microsoft.com/en-us/library/windows/desktop/aa372055.aspx –

相关问题