我正在尝试使用CreateProcess函数执行dos命令:
LPWSTR cmd=(LPWSTR)QString("C:\\windows\\system32\\cmd.exe subst " + DLetter+" \""+mountPath+"\"").utf16();
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if ( CreateProcessW(0, // Application name
cmd, // Application arguments
NULL,
NULL,
TRUE,
0,
NULL,
L"C:\\windows\\system32", // Working directory
&si,
&pi) == TRUE)
{ ...
它给出了最后一个错误3 = ERROR_PATH_NOT_FOUND,当我将应用程序路径"C:\\windows\\system32\\cmd.exe"
与它显示控制台的命令分开而不执行我的subst命令时。
任何帮助将不胜感激。
答案 0 :(得分:5)
您需要在cmd.exe
的选项中包含/ C或/ K.
/C Carries out the command specified by string and then terminates /K Carries out the command specified by string but remains
如果没有这些选项,您传递的subst
命令将被忽略。
话虽如此,subst
,至少在我的Windows 7框中,并未在cmd.exe
内实现。它是一个单独的可执行文件因此,您可以直接调用它并完全绕过cmd.exe
。
关于您对CreateProcess
的来电,我有以下评论:
C:\\windows\\system32
。只需调用subst.exe
,让系统使用标准搜索路径找到可执行文件。FALSE
传递bInheritHandles
。您没有将任何句柄传递给新进程,因此您不需要新进程来继承句柄。NULL
作为工作目录。这里没有必要指定它。答案 1 :(得分:1)
尝试使用
"C:\\windows\\system32\\cmd.exe /c subst " + DLetter+" \""+mountPath+"\""
代替。 CMD不会在没有/c
或/k
的情况下接受参数,除非您想在控制台窗口中看到输出,否则只需使用/c
。