从 2003 R2 计算机运行 Windows Server 2008 R2 计算机上的应用程序时出现 Psexec 问题

从 2003 R2 计算机运行 Windows Server 2008 R2 计算机上的应用程序时出现 Psexec 问题

我正在尝试使用批处理文件从 Windows Server 2003 R2 计算机在 Windows Server 2008 R2 计算机上运行应用程序,批处理文件中包含以下代码行:

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2

使用 psexec 启动时,应用程序无法正确运行,但如果我以同一用户身份登录 nightmachine 并通过 cmd 从其文件路径启动它,应用程序将正确运行。我已经能够从应用程序的日志中获取返回的错误,返回的异常如下:

System.DllNotFoundException:无法加载 DLL“rasapi32.dll”:动态链接库 (DLL) 初始化例程失败。(来自 HRESULT 的异常:0x8007045A)

在网上搜索该错误代码后,有很多帖子说这是由文件损坏引起的,但我不明白为什么会出现这种情况,因为当不从 psexec 运行时,应用程序将正常运行。(用户在两台机器上都是管理员)

有人能帮我解决这个问题吗?如果需要更多信息来帮助解决此问题,请提出要求,我会尽力发布。

答案1

我假设问题中的 UNC 只有一个斜线,这是因为需要在这里这样输入以格式化“\\\”,但如果没有,请修复它。我认为问题在于 psexec 正在查看引号之外的参数,并且不知道如何处理它们。最简单的方法可能是将您可以在服务器上运行的命令放入批处理文件中,然后 psexec 该批处理文件,或者您可以尝试将第二个引号移动到参数之后。当然,路径中不能有任何空格。

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2"

答案2

问题解决了!我发现当应用程序调用自身之外的进程时,通过 psexec 在远程 PC 上运行的应用程序会丢失其用户详细信息,这意味着所需的任何权限都会丢失。

为了解决这个问题,我最终在应用程序所在的远程 PC 上设置了一个计划任务,以使用所需用户的凭据运行该应用程序。该任务设置为运行一次,但也设置为可以手动触发。这意味着当任务运行应用程序时,不会丢失任何权限。我使用 Psexec 启动了任务:

psexec \\remotemachine schtasks /run /tn "Task name"

相关内容