创建在所选目录中打开的命令提示符进程

Creating a command prompt process that opens at a chosen directory

这里需要帮助,我正在尝试使用 windows api 在 C++ 中创建一个进程,发生的事情是正在创建的进程是 cmd.exe 但是我想要cmd.exe 在某个目录打开 cd'd,即根目录 c:\,但是该进程在可执行文件的目录中打开。 我尝试将 "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";    

非常感谢您的帮助! 谢谢

如果您希望 cd /(或任何其他命令)起作用,您需要在命令提示符中使用 /k/c 标志。您可以在 cmd.exe 的文档中查找这些开关,但基本上,/c 运行命令然后终止,而 /k 运行命令并保持控制台会话打开。你几乎肯定想要 /k 这里。

但实际上,您应该将目录指定为进程的工作目录,而不是执行更改目录命令。

您可以按照 Raw N 的建议,通过调用 ShellExecute function 轻松完成此操作。工作目录是它的参数之一。 ShellExecute(或 ShellExecuteEx)比 CreateProcess 更易于使用,应该是首选,除非您需要一些只能通过 CreateProcess 才能获得的特殊低级行为。

这也适用于 CreateProcess:将路径作为 lpCurrentDirectory 参数传递。

无论您做什么,都不要对路径进行硬编码!在 Windows NT 上使用 %comspec% 环境变量。它也可以只执行 cmd,让默认搜索路径完成它们的工作。