我正在尝试使用CreateProcess函数执行一个dos命令:
LPWSTR cmd=(LPWSTR)QString("C:\windows\system32\cmd.exe subst " + DLetter+" ""+mountPath+""").utf16(); STARTUPINFO si; PROCESS_@R_61_4045@ION pi; ZeroMemory( &si,sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi,sizeof(pi) ); if ( CreateProcessW(0,// Application name cmd,// Application arguments NULL,NULL,TRUE,L"C:\windows\system32",// Working directory &si,&pi) == TRUE) { ...
它给出最后一个错误3 = ERROR_PATH_NOT_FOUND,当我分开应用程序path"C:\windows\system32\cmd.exe"从它显示控制台,而不执行我的subst命令的命令。
任何帮助将不胜感激。
batch file调用将密钥发送给应用程序的VBS
我怎样才能运行一个batch file,获取驱动器空间,并保持打开CMD?
批处理 – 将可变parameter passing到包含空格的batch file
保持批量打开多个控制台窗口
如何禁止“打开”窗口
使用batch file循环列表
从命令行启动程序而不打开新窗口
更新batch file中的命令行参数
如何清理DOS / cmd shell PATH命令中的混乱输出,以便我可以读取它?
如何删除Windows中另一个文本文件中存在的文本文件中的所有行?
您需要在cmd.exe的选项中包含/ C或/ K。
/ C执行由字符串指定的命令,然后终止
/ K执行字符串指定的命令,但保持不变
如果没有这些选项,您传递的subst命令将被忽略。
话虽如此,至少在我的Windows 7中, subst ,不是在cmd.exe里面实现的。 它是一个单独的可执行文件 所以你可以直接调用它并完全绕过cmd.exe 。
关于您对CreateProcess的调用,我有以下几点意见:
不要包含路径C:\windows\system32 。 只需调用subst.exe ,让系统使用标准的搜索路径找到可执行文件。
为bInheritHandles传递FALSE 。 您没有将任何句柄传递给新进程,因此您不需要新进程来继承您的句柄。
传递NULL作为工作目录。 这里没有必要指定它。
尝试使用
"C:\windows\system32\cmd.exe /c subst " + DLetter+" ""+mountPath+"""
代替。 CMD将不接受没有/c或/k ,除非您想在控制台窗口中看到输出,只需使用/c 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。