C++ Dos窗口出现,然后立即消失

C++ Dos窗口出现,然后立即消失,c++,cmd,createprocess,C++,Cmd,Createprocess,当我运行下面的代码时,dos窗口立即出现,然后消失。 我想要的是窗口将停留并等待用户的下一个命令输入。 如果我想保持窗口显示,并且我必须在我的项目中使用createProcess,而不是winexec等,那么我应该如何处理startupInfo.hstInput int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,

当我运行下面的代码时,dos窗口立即出现,然后消失。 我想要的是窗口将停留并等待用户的下一个命令输入。 如果我想保持窗口显示,并且我必须在我的项目中使用createProcess,而不是winexec等,那么我应该如何处理startupInfo.hstInput

int WINAPI WinMain(
                   HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpComLine,
                   int nCmdShow)
{
    SECURITY_ATTRIBUTES secAttr; 
    HANDLE hRead,hWrite;

secAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
secAttr.lpSecurityDescriptor = NULL; 
secAttr.bInheritHandle = TRUE; 
if (!CreatePipe(&hRead,&hWrite,&secAttr,0)) 
{ 
    return FALSE; 
} 

char command[1024];
strcpy(command,"ping 192.168.0.1");

STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo; 
startupInfo.cb = sizeof(STARTUPINFO); 
GetStartupInfo(&startupInfo); 
startupInfo.hStdError = hWrite;     
startupInfo.hStdOutput = hWrite;
startupInfo.hStdInput = hRead;          
startupInfo.lpTitle = "CMD";

if (!CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&startupInfo,&processInfo)) 
{ 
        MessageBox(NULL, "Failed", NULL, MB_OK);
        CloseHandle(hWrite); 
        CloseHandle(hRead); 
        return FALSE; 
} 

CloseHandle(hWrite); 
CloseHandle(hRead);

return 0;
}

如果问题是进程窗口立即关闭,可能是您应该添加
暂停
。。。要查看您的
ping
命令的结果

现在,我决不是
c++
专家。。。但我建议,尝试以下几行代码

CreateProcess(  
                      "c:\\windows\\system32\\cmd.exe",  
                      "/k ping 192.168.0.1 && pause && exit",  
                      NULL,  
                      NULL,  
                      FALSE,  
                      0,  
                      NULL,  
                      NULL,  
                      &startupInfo,&processInfo);  

为什么要将
&&pause&&exit
/k
开关一起使用?OP说“等待用户的下一个命令输入”,但是这个组合不允许输入更多的用户命令。单独使用
/k
可能会导致错误。如果你刚要退出,你最好放弃
&&exit
,使用
/c
而不是
/k
@RemyLebeau,因为你可能是对的。。。我有点错过了“下一个命令”部分…为什么你要像这样手动运行
ping
,而不是使用?我正在编写一个项目,我想通过我的win32应用程序通过控制台连续输入/输出,所以我希望dos窗口在代码创建过程后保持打开状态(NULL、command、NULL、NULL、TRUE、NULL、NULL、NULL、NULL、startupInfo和processInfo)正在执行并等待下一个用户命令指定的
命令运行完成后,DOS窗口关闭。由于
命令本身就是
ping
,因此当
ping
退出时,DOS窗口将关闭。如果要在
ping
退出后保持DOS窗口打开,则需要运行
ping
>cmd.exe
改为指定了
/K
命令行开关,并将
ping
作为
cmd.exe
执行的初始命令,例如:
cmd.exe/K ping 192.168.0.1
。使用
%COMSPEC%
环境变量获取
cmd.exe
.Ty的完整路径,先生!但是如何输入我的公用行to cmd.exe?在本例中,“code WriteFile(hRead,buffer,1024,&bytesRead,NULL)”没有执行我告诉过您的任何操作。请将
命令
字符串设置为
“cmd/K ping 192.168.0.1”
并将整个字符串传递给
CreateProcess()