创建在所选目录中打开的命令提示符进程
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
,让默认搜索路径完成它们的工作。
这里需要帮助,我正在尝试使用 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
,让默认搜索路径完成它们的工作。