在这里需要帮助,我正在尝试使用windows api在c ++中创建一个进程,发生的是正在创建的进程是cmd.exe但是我希望cmd.exe在某个目录下打开cd'd即root c:\,但是进程在可执行文件的dir处打开。 我尝试传入“cd \”作为CreateProcess函数的第二个参数无效
以下是代码片段:
TCHAR program[] = TEXT("C:/Windows/System32/cmd.exe");
TCHAR command[] = TEXT("cd /");
STARTUPINFO info;
PROCESS_INFORMATION processInfo;
ZeroMemory(&info,sizeof(STARTUPINFO));
ZeroMemory(&processInfo,sizeof(PROCESS_INFORMATION));
BOOL processResult =
CreateProcess(program,
command, NULL, NULL,
TRUE, CREATE_NEW_CONSOLE,
NULL, NULL,
&info,
&processInfo);
if(!processResult){
std::cerr << "CreateProcess() failed to start program \""
<< program << "\"\n";
exit(1);
}
std::cout << "Started program \""
<< program << "\" successfully\n";
非常感谢帮助! 感谢
答案 0 :(得分:2)
如果希望cd /
(或任何其他命令)产生任何影响,则需要在命令提示符下使用/k
或/c
标志。您可以在cmd.exe
的文档中查看这些开关,但基本上,/c
运行命令然后终止,而/k
运行命令并保持控制台会话打开。你几乎肯定想在这里/k
。
但实际上,您应该将该目录指定为进程的工作目录,而不是执行change-directory命令。
您可以通过调用ShellExecute
function轻松完成此操作,正如Raw N建议的那样。工作目录是其参数之一。 ShellExecute
(或ShellExecuteEx
)比CreateProcess
更容易使用,除非您需要一些只能通过CreateProcess
获得的特殊低级行为,否则应该首选{。}}。 / p>
这也适用于CreateProcess
:将路径作为lpCurrentDirectory
参数传递。
无论你做什么,都不要硬编码路径!在Windows NT上使用%comspec%
环境变量。它也可以只执行cmd
,让默认搜索路径完成它们的工作。