创建在选定目录中打开的命令提示进程 需要帮助,我试图用Windows API创建C++进程,发生的事情是创建CMD.EXE的过程,但是我希望CMD.EXE在某个目录上打开CD,即根C:\,但是进程在可执行文件的DIR打开。 我尝试将“cd\”作为CreateProcess函数的第二个参数传递,但没有成功

创建在选定目录中打开的命令提示进程 需要帮助,我试图用Windows API创建C++进程,发生的事情是创建CMD.EXE的过程,但是我希望CMD.EXE在某个目录上打开CD,即根C:\,但是进程在可执行文件的DIR打开。 我尝试将“cd\”作为CreateProcess函数的第二个参数传递,但没有成功,c++,winapi,createprocess,C++,Winapi,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)); B

下面是一段代码:

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";    
TCHAR程序[]=TEXT(“C:/Windows/System32/cmd.exe”);
TCHAR命令[]=文本(“cd/”;
STARTUPINFO信息;
处理信息处理信息;
零内存(&info,sizeof(STARTUPINFO));
零内存(&processInfo,sizeof(进程信息));
布尔处理结果=
创建进程(程序,
命令,空,空,
正确,创建新的控制台,
空,空,,
&信息,
&processInfo);
如果(!processResult){

std::cerr如果需要
cd/
(或任何其他命令)要产生任何效果,您需要对命令提示符使用
/k
/c
标志。您可以在文档中查找这些开关,以查找
cmd.exe
,但基本上,
/c
运行命令,然后终止,
/k
运行命令并保持控制台会话打开。您可以我确实想要这里的
/k

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

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

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


无论您做什么,都不要硬编码路径!在WindowsNT上使用
%comspec%
环境变量。只需执行
cmd
,默认搜索路径就可以了。

Cd到目录,然后运行该过程。签出。[/edit]您可以改用
ShellExecute
ShellExecuteEx()
应该总是用来代替
ShellExecute()
,因为后者的错误报告能力很差(只有一组有限的非标准返回值)。还应该注意的是
CreateProcess()
ShellExecute()的开销小
。非常详细的答案,回答了我想要的一切,谢谢