我们有一个在Perl 32位中运行的安装程序。此程序需要获取有关群集资源的信息,因此它运行cluster.exe(使用反引号)并解析其输出。
在Windows Server 2003上,这很顺利,因为syswow64下存在32位版本的cluster.exe。但是,Windows Server 2008上不存在这样的32位版本,因此cluster.exe的反引号表示无法找到这样的可执行文件,因为32位进程在syswow64下查找它。
有人可以想到一种方法可以绕过这个问题并获取群集资源信息吗? 一种手动方式是从system32复制64位版本的cmd.exe,然后使用“/ c cluster.exe”运行它,这将启动system32下的64位cluster.exe。 (复制cluster.exe将无法正常工作,因为它无法找到群集缓存。)但是,这仅适用于手动解决方法,而不是所有用户的解决方案。
是否有另一种方法可以让Windows启动64位cluster.exe?
谢谢,
splintor
PS
一个月前asked on technet也有类似的问题,但没有得到真正的答案。
答案 0 :(得分:0)
我找到了两种可能的解决方案: 一种是编写一个名为cluster.exe的小型64位应用程序,它只调用%SystemRoot%\ System32 \ cluster.exe(使用system()),并将其放在%SystemRoot%\ syswow64下。由于它是64位应用程序,因此将调用正确的64位cluster.exe应用程序。
另一个解决方案是使用sysnative重定向(如here所述),所以现在我们检查 - 如果%SystemRoot%\ System32 \ cluster.exe存在,我们使用它,否则如果%SystemRoot%\ Sysnative \ cluster.exe存在,我们使用它,否则我们使用普通的cluster.exe。
注意:这与刚才得到解答的this telnet.exe problem非常相似。