微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CreateProcess执行Windows命令

我正在尝试使用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] 举报,一经查实,本站将立刻删除。

相关推荐