Dos窗口出现然后立即消失
Posted
技术标签:
【中文标题】Dos窗口出现然后立即消失【英文标题】:Dos window show up then disappears immidiately 【发布时间】:2017-04-14 12:29:21 【问题描述】:当我运行下面的代码时,dos 窗口立即出现然后消失。 我想要的是窗口将保留并等待用户的下一个命令输入。 如果我想保持窗口显示并且我必须在我的项目中使用 createProcess 而不是 winexec 等,我应该如何处理 startupInfo.hStdInput。
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
,而不是使用IcmpSendEcho()
?
我正在编写一个项目,我想通过我的 win32 应用程序使用控制台连续输入/输出,所以我希望 dos 窗口在代码 CreateProcess(NULL, command,NULL,NULL,TRUE,NULL ,NULL,NULL,&startupInfo,&processInfo) 正在执行并等待下一个用户的命令
当指定的command
完成运行时,DOS 窗口关闭。由于您的command
本身只是ping
,所以当ping
退出时DOS 窗口将关闭。如果要在ping
退出后保持 DOS 窗口打开,则需要运行 cmd.exe
而不是指定/K
命令行开关,并将ping
作为cmd.exe
执行的初始命令,例如:cmd.exe /K ping 192.168.0.1
。使用%COMSPEC%
环境变量获取cmd.exe
的完整路径。
你好,先生!但是如何将我的通用行输入到 cmd.exe?在这种情况下,'code WriteFile(hRead, buffer, 1024, &bytesRead, NULL)' 没有做任何事情
我告诉过你怎么做。将您的 command
字符串设置为 "cmd /K ping 192.168.0.1"
并将整个字符串传递给 CreateProcess()
。
【参考方案1】:
如果问题是进程窗口立即关闭,您可能应该添加pause
... 才能看到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 你可能是对的......我有点错过了“下一个命令”部分......以上是关于Dos窗口出现然后立即消失的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap 应用程序文本出现,然后立即消失。我该如何调试?