我怎样才能运行一个Windowsbatch file,但隐藏命令窗口?

我怎样才能运行一个Windowsbatch file,但隐藏命令窗口? 当文件正在执行时,我不希望cmd.exe在屏幕上可见。 这可能吗?

Solutions Collecting From Web of "我怎样才能运行一个Windowsbatch file,但隐藏命令窗口?"

如果编写非托管程序并使用CreateProcess API,则应初始化STARTUPINFO类型的lpStartupInfo参数,以使结构的wShowWindow字段为SW_HIDE,而不要忘记在STARTUPINFO的dwFlags字段中使用STARTF_USESHOWWINDOW标志。 另一种方法是使用dwCreationFlags参数的CREATE_NO_WINDOW标志。 ShellExecute和ShellExecuteEx函数也有同样的技巧。

如果您编写托管应用程序 ,则应遵循http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx中的建议:使用CreateNoWindow = trueUseShellExecute = false初始化ProcessStartInfo ,然后使用作为参数。 就像你可以将ProcessStartInfo属性WindowStyle设置为ProcessWindowStyle.Hidden或者与CreateNoWindow = true一起CreateNoWindow = true

可以使用以wcsript.exe开头的VBS脚本 在脚本内部可以使用CreateObject("WScript.Shell") ,然后使用0作为第二个( intWindowStyle )参数运行。 http://www.robvanderwoude.com/files/runnhide_vbs.txt为例。 我可以继续使用Kix, PowerShell等。

如果您不想编写任何程序,您可以使用任何现有的实用程序,如CMDOW / RUN / HID“c:\ SomeDir \ MyBatch.cmd” , hstart / NOWINDOW / D = c:\ scripts“c:\ scripts \ mybatch .bat“ , hstart / NOCONSOLE”batch_file_1.bat“其中完全一样。 我相信你会找到更多这样的免费工具。

在某些情况下(例如从UNC路径开始 ),将一个工作目录也设置为某个本地路径( %SystemRoot%\system32始终工作)很重要。 这对使用上面列出的启动隐藏批次变体中的任何一个都很重要。

使用C#很容易启动一个批处理命令而不打开一个窗口。 看看下面的代码示例:

  Process process = new Process(); process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.UseShellExecute = false; process.StartInfo.FileName = "doSomeBatch.bat"; process.Start(); 

对于任何可执行文件,可以使用带“c”参数的cmd来运行程序:

 cmd /c "your program address"\"YourFileName".bat 

( – >如果它是一个批处理文件!)作为最后的解决方案,我建议你创建一个.cmd文件,并把这个命令放在里面:

 cmd /c "your program address"\"YourFileName".bat exit 

现在只需运行这个.cmd文件。

在这里,我已经编译了所有的方法,我知道启动一个隐藏进程批处理没有外部tools.With准备使用脚本(其中一些丰富的选项),所有这些都形成命令行。还有可能的PID返回。使用的工具是IEXPRESS,SCHTASKS,WScript.Shell,Win32_Process和JScript.Net – 但它们都包装在一个.bat文件中。

原生的C ++ Oleg的编码版本的答案 – 这是复制/粘贴从我工作的Boost软件许可证项目。

 BOOL noError; STARTUPINFO startupInfo; PROCESS_INFORMATION processInformation; ZeroMemory(&startupInfo, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); startupInfo.dwFlags = STARTF_USESHOWWINDOW; startupInfo.wShowWindow = SW_HIDE; noError = CreateProcess( NULL, //lpApplicationName //Okay the const_cast is bad -- this code was written a while ago. //should probably be &commandLine[0] instead. Oh, and commandLine is //a std::wstring const_cast<LPWSTR>(commandLine.c_str()), //lpCommandLine NULL, //lpProcessAttributes NULL, //lpThreadAttributes FALSE, //bInheritHandles CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT, //dwCreationFlags //This is for passing in a custom environment block -- you can probably //just use NULL here. options.e ? environment : NULL, //lpEnvironment NULL, //lpCurrentDirectory &startupInfo, //lpStartupInfo &processInformation //lpProcessInformation ); if(!noError) { return GetLastError(); } DWORD exitCode = 0; if (options.w) //Wait { WaitForSingleObject(processInformation.hProcess, INFINITE); if (GetExitCodeProcess(processInformation.hProcess, &exitCode) == 0) { exitCode = (DWORD)-1; } } CloseHandle( processInformation.hProcess ); CloseHandle( processInformation.hThread ); 

这个来自technet的小小的VBScript可以做到这一点:

 Const HIDDEN_WINDOW = 12 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objStartup = objWMIService.Get("Win32_ProcessStartup") Set objConfig = objStartup.SpawnInstance_ objConfig.ShowWindow = HIDDEN_WINDOW Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process") errReturn = objProcess.Create("mybatch.bat", null, objConfig, intProcessID) 

编辑mybatch.bat到你的bat文件名,保存为vbs,运行它。

Doc说它没有在Win7中测试,但我只是测试它,它工作正常。 不管你运行什么程序,都不会显示任何窗口

你可以编写一个windows服务,只是执行你的批处理文件。 由于服务在自己的桌面会话中运行,命令窗口将不会被用户看到。

通过使用right-click并选择Create shortcut方式到您的bat文件。 Right-click您创建的快捷方式,然后单击属性。 点击Run下拉框并选择Minimized。

使用Bat To Exe转换器并将Bat文件编译为可执行文件。

脚步:

  1. 打开蝙蝠到exe转换器
  2. 选择你的Bat文件
  3. 在选项中选择“隐形应用”
  4. 按编译按钮结束

1,下载蝙蝠到exe转换器并安装它2,运行蝙蝠到exe应用程序3,下载.pco图像,如果你想让好看的exe 4,指定bat文件位置(c:\ my.bat)5,指定保存exe文件的位置(例如:c:/my.exe)6,选择版本信息选项卡7,选择图标文件(下载的.pco图像)8,如果要填写版本,公司名称等信息9 ,将选项卡更改为选项10,选择不可见的应用程序(这将在运行应用程序时隐藏命令提示符)11,选择32位(如果您选择64位exe将只能在32位操作系统)12,编译13,复制将exe文件正确的执行到bat文件所在的位置14,运行exe文件