我们有几个 Windows 2003 服务器,我们使用它们运行实用程序执行。最近,其中一个停止工作了。对于那些不熟悉它的人来说,这个过程通常是这样的:
执行以下命令:
- 将 PSEXESVC.exe 复制到
\\target\admin$
(通常为 C:\WINDOWS) - 将其安装为服务并启动它
- 与服务通信,让服务启动所请求的程序
- 让服务等待进程的退出状态
- 向用户显示退出状态
- 停止并删除服务
- 删除 PSEXESVC.exe
在受影响的服务器上,我已验证除步骤 3 中的某些内容外,所有事情都已发生。无论我要求 psexec 运行什么程序(cmd、ping、ipconfig 等),它都会显示消息“命令退出于目标错误代码为128。”
在 sysinternals 论坛上已经出现过几次这样的情况:
有人声称错误是由被调用的命令返回的,但我认为这只是它试图获取退出代码的方式的产物。net helpmsg 128
给出“没有要等待的子进程。”,所以这让我认为它无法等待子进程,因为没有子进程。
我已经验证该服务确实启动正确,所请求程序的权限在工作服务器和非工作服务器之间是相同的,并且如果从受影响的服务器以本地方式运行(例如使用而psexec cmd
不是psexec \\target cmd
),psexec 可以工作。
我看到的唯一确认的解决方案是重启机器。虽然这是一台生产服务器,但白天重启是一种选择,因为它的主要工作负载是晚上的批处理。但是,我犹豫着是否要重启,因为我真的很想确定 psexec 问题的原因,而且现在 psexec 进程正用于开发目的,所以推迟重启不会对生产产生影响。