在对_wsystem的调用中执行psexec时出现问题

problems executing psexec in a call to _wsystem

本文关键字:psexec 问题 执行 wsystem 调用 在对      更新时间:2023-10-16

在本机应用程序中,我必须在本地网络上的另一台计算机上启动另一个应用程序(toolB.exe)。为此,我使用psexec和对_wsystem的调用。目前,我正在尝试在同一台计算机上启动工具B,而不是在远程计算机上。所以在我的代码中我有这个:

const std::wstring command = L""" + psexecfull + L"" " + psexecargs + L" -c -f -d -s -n 10 "" + toolpathfull + L"" " + toolargs;
int exitcode = _wsystem(nullptr);
wchar_t buffer[1024];
_wgetcwd(buffer, _countof(buffer));
exitcode = _wsystem(command.c_str());

这个消息告诉我找到了命令解释器(第一次调用带有nullptr的_wsystem返回1),当前工作目录是C:projectbintoolstoolA,并且命令(C:projectexternalspsexectoolspsexec.exe \127.0.0.1 -c -f -d -s -n 10 C:projectbintoolstoolBtoolB.exe -arg)失败(第二次调用带有命令的_wsystem,返回1,文本The filename, directory name, or volume label syntax is incorrect出现在我的应用程序控制台窗口中)。也许我还应该提到这段本机代码位于一个DLL中,该DLL包含C++(本机)和C++/CLI(托管)代码,并由一个名为toolA的.NET应用程序(我认为在同一AppDomain中)动态加载和执行。

但奇怪的是,当我从完全相同的工作目录手动执行完全相同的命令行时,psexec运行良好,toolB.exe按预期启动。那么,为什么这不能通过调用wsystem以编程方式工作呢??我该怎么解决这个问题??

如果重要的话,我运行的是Windows 7 x64。

好的,所以在命令行上手动尝试的结果不是完全相同的命令行文本,我没有对psexec和toolB可执行文件使用封闭的"。将封闭的"留给psexec可执行文件是可行的,因此显然_wsystem不允许用"封闭第一个参数。这很奇怪,因为如果psexec位于有空格的路径中,则在尝试解析psexec路径时对_wsystem的调用将失败。我还不知道如何克服这个问题。

除此之外,对wsystem的调用还返回了toolB.exe的进程id,而我期望的是0,但这是另一个问题。