在 Windows Server 2003 64 位上使用 Psexec 的解决方法

在 Windows Server 2003 64 位上使用 Psexec 的解决方法

本地操作系统:Windows Server 2003 远程操作系统:Windows Server 2003 64 位

我有一台管理服务器(32 位),上面运行着许多计划的批处理脚本。其中一个脚本用于psexec在远程主机(64 位)上启动进程。

我的脚本只是简单地执行了以下操作。但它会返回"The handle is invalid"

C:\psexec.exe \\%HOST% -i 1 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% MyApplication.exe

在网上查了一下,发现 RDP 到会话 1 和 psexec 到会话 1 可能有不同的环境和不同的可用系统资源(句柄)。所以这可能是我的 psexec 脚本不起作用的原因。

但是,使脚本中的控制台会话下运行的 psexec 确实有效。

C:\psexec.exe \\%HOST% -i 0 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% MyApplication.exe

有些人说在 WoW64 下运行 psexec 或让 psexec 在 WoW64 下启动应用程序可以解决 64 位机器上的问题。我猜控制台会话中的 psexec 也有类似的功能。有人能证实吗?

我的问题:我的应用程序有 GUI,所以我仍然需要在用户会话中运行它。有什么办法吗?请指教,谢谢。

答案1

您可以使用以下命令以交互模式运行:

C:\psexec.exe \\%HOST% -i 0 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% cmd /c MyApplication.exe 

如果您不想捕获启动的应用程序的退出代码,则上述方法有效。

答案2

在网上查了一下,发现 RDP 到会话 1 和 psexec 到会话 1 可能有不同的环境和不同的可用系统资源(句柄)。所以这可能是我的 psexec 脚本不起作用的原因。

不,这没有意义。虽然有些句柄确实可以在进程之间共享(实际上是继承),但在编程范围之外,这没有任何意义。

有些人说在 WoW64 下运行 psexec 或让 psexec 在 WoW64 下启动应用程序可以解决 64 位机器上的问题。我猜控制台会话中的 psexec 也有类似的功能。有人能证实吗?

WoW64 的意思是“Windows on Windows 64”。基本上,它是 Windows 64 操作系统内的 32 位环境。每个 win32 可执行文件都将在 WoW64“下”运行:没有其他方法可以运行,因为它们无法使用 64 位版本的操作系统功能:它们需要经过 WoW64 提供的转换层。

我的问题:我的应用程序有 GUI,所以我仍然需要在用户会话中运行它。有什么办法吗?请指教,谢谢。

这可能是您的应用程序失败的原因(不是 PSexec,而是您的应用程序):它试图获取一个窗口的句柄,并且由于它没有在交互式环境中运行,所以这个调用失败(我猜它正在尝试获取资源管理器或类似的东西的句柄)。

(除此之外,尝试添加 -i 开关,正如 Rupasri Somavarapu 所建议的那样:它应该可以起作用)

相关内容