64 位 Windows 2008 上的 32 位 cluster.exe
我们有一个以 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?
谢谢,
分裂
PS
提出了类似的问题technet 一个月前,但没有得到真正的答案。
We have an installation program that runs in Perl 32-bit. This program needs to get information on cluster resources, so it runs cluster.exe (using backticks) and parse its output.
On Windows Server 2003 this went well, as a 32-bit version of cluster.exe existed under syswow64. However, such a 32-bit version does not exist on Windows Server 2008, so the backticks run of cluster.exe says it can't find such an executable, as 32-bit process look for it under syswow64.
Can someone think of a way we can bypass this problem and get the cluster resource information?
One manual way is to copy the 64-bit version of cmd.exe from system32, and then run it with "/c cluster.exe" which will start the 64-bit cluster.exe under system32. (Copying the cluster.exe won't work well, as it can't find the cluster cache.) However, this is only good as a manual workaround, and not as a solution to all users.
Is there another way to cause windows to start the 64-bit cluster.exe?
Thanks,
splintor
PS
A similar question was asked on technet a month ago, but didn't get a real answer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我找到了两种可能的解决方案:
一种是编写一个名为 cluster.exe 的小型 64 位应用程序,它只需调用 %SystemRoot%\System32\cluster.exe(使用 system()),并将其放在 %SystemRoot%\syswow64 下。由于它是 64 位应用程序,因此将调用正确的 64 位 cluster.exe 应用程序。
另一个解决方案是使用 sysnative 重定向(如解释这里),所以现在我们检查 - 如果 %SystemRoot%\System32\cluster.exe 存在,我们使用它,否则如果 %SystemRoot%\Sysnative\cluster.exe 存在,我们就使用它,否则我们使用普通的 cluster.exe。
注意:这与刚刚得到解答的这个 telnet.exe 问题非常相似。
I found two possible solutions:
One is to write a small 64-bit application named cluster.exe that simply calls %SystemRoot%\System32\cluster.exe (using system()), and put it under %SystemRoot%\syswow64. Since it is a 64-bit application, the correct 64-bit cluster.exe application will be called.
Another solution is to use the sysnative redirection (as explained here), so now we check - if %SystemRoot%\System32\cluster.exe exists, we use it, else if %SystemRoot%\Sysnative\cluster.exe exists we use it, else we use plain cluster.exe.
Note: this is very similar to this telnet.exe problem that just got answered.