[英]CreateProcess calling cmd.exe incl. arguments with no showing (flashing) window?
传奇继续...
我已经在网上搜索过,已经在StackOverflow上搜索过,我发现了很多希望给出答案/解决方案的方法,但是不知何故,它们对我来说都失败了(包括与ShellExecute(Ex)相关的问题)。
如何使用CreateProcess隐藏(闪烁的)CMD窗口(包括参数)?
我基本上想调用/执行一组条件/本机cmd.exe
命令(即FOR /F
和||
),还要调用一个外部命令FIND(STR).exe
。 而且,这没有显示(闪烁的)CMD窗口。
但是,即使隐藏诸如"cmd.exe /C ECHO ...flashing window is bad..."
似乎也无法实现。
我尝试过的代码(包括与dwFlags
和wShowWindow
标志有关的许多变体
#include <windows.h>
int main()
{
char cmdline[] = "cmd.exe /c ECHO ...flashing window is bad...";
PROCESS_INFORMATION pi;
STARTUPINFO si;
// memset(&si,0,sizeof(STARTUPINFO));
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
// si.dwFlags = STARTF_USESTDHANDLES;
// si.dwFlags = CREATE_NO_WINDOW;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
// si.wShowWindow = CREATE_NO_WINDOW;
CreateProcess(NULL, (LPSTR) cmdline, NULL, NULL, 0, 0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// ExitProcess;
return 0;
}
我不想依赖外部程序,例如.vbs(Windows脚本宿主)或快捷方式,而只是依赖一个独立的已编译.exe。
这是(真的)要问的太多吗,还是我(完全)做错了?
谢谢...
更新:您似乎还将CreateProcess
标志(其dwCreationFlags
参数)与STARTUPINFO
结构的成员混淆了。 这些是不同的标志, CREATE_NO_WINDOW
不应在STARTUPINFO
。
您必须传递CREATE_NO_WINDOW
标志,然后控制台窗口将不会显示。 最初我已经回答过,您必须重定向不正确的标准句柄(但仍然强烈建议)。
设置STARTF_USESTDHANDLES
并填写适当的句柄。 如果您对过程的输出感兴趣,请创建管道,否则可以通过nul
打开该通道。
尝试使用ProcessBuilder。 这是一些我看似可以正常工作的代码示例。 在下面的代码中,shellScript是我正在动态创建的StringBuilder,其中包含命令及其要执行的参数。
String[] scriptArray = shellScript.toString().split(" ");
ProcessBuilder builder = new ProcessBuilder(scriptArray);
File outputFile = new File("/logs/AgentOutputLog.txt");
File errorFile = new File("/logs/AgentErrorLog.txt");
builder.redirectOutput(outputFile);
builder.redirectError(errorFile);
Process process = builder.start();
int errCode = process.waitFor();
//errCode = 0 means online
if(errCode == 0){
success = true;
break;
//errCode = 1 means offline
} else if (errCode == 1){
success = false;
break;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.