从我的原生应用程序中,我要开始另一台计算机上的应用程序(toolB.exe)在本地网络上。要做到这一点我使用PSEXEC和调用_wsystem。现在,我想在同一台计算机上,而不是远程计算机上启动toolB。所以在我的代码,我有这样的:
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:\project\bin\tools\toolA
,和该命令(C:\project\externals\psexec\tools\psexec.exe \\127.0.0.1 -c -f -d -s -n 10 C:\project\bin\tools\toolB\toolB.exe -arg
)失败(第二调用与命令返回1和文本The filename, directory name, or volume label syntax is incorrect
到_wsystem出现在我的应用程序控制台窗口)。也许我还应该提到这段本机代码是在同时包含C ++(天然的)和C ++ / CLI(管理)的代码和被动态装载和执行由.NET应用程序(在相同的应用程序域我认为)称为toolA一个DLL 。
奇怪的是,虽然,当我从完全一样的工作目录执行完全一样的命令行手动PSEXEC运行良好,并预期toolB.exe开始。所以这是为什么不带编程调用_wsystem工作?我该如何解决??
我运行Windows 7 X64的,如果它很重要。
确定,所以在命令行上手动尝试事实并非是完全相同的命令行的文本,我没有使用封闭的“”为PSEXEC和toolB可执行文件。离开封闭“”出于对PSEXEC可执行的工作,所以显然_wsystem不会容忍与封闭的第一个参数“”。因为这时如果PSEXEC位于与空间,同时试图解决PSEXEC路径调用_wsystem将失败的路径是怪异。我还没有确定如何克服这一点。
除了这一切,也_wsystem调用返回toolB.exe的进程ID,而我期待0,但这是另一个问题。