If you write an unmanaged program and use CreateProcess API then you should initialize
lpStartupInfo parameter of the type STARTUPINFO so that
wShowWindow field of the struct is SW_HIDE and not forget to use
STARTF_USESHOWWINDOW flag in the
dwFlags field of STARTUPINFO. Another method is to use CREATE_NO_WINDOW flag of
dwCreationFlags parameter. The same trick work also with ShellExecute and ShellExecuteEx functions.
If you write a managed application you should follows advices from http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx: initialize
CreateNoWindow = true and
UseShellExecute = false and then use as a parameter of . Exactly like in case of you can set property
ProcessWindowStyle.Hidden instead or together with
CreateNoWindow = true.
You can use a VBS script which you start with wcsript.exe. Inside the script you can use
CreateObject("WScript.Shell") and then Run with 0 as the second (
intWindowStyle) parameter. See http://www.robvanderwoude.com/files/runnhide_vbs.txt as an example. I can continue with Kix, PowerShell and so on.
If you don’t want to write any program you can use any existing utility like CMDOW /RUN /HID “c:\SomeDir\MyBatch.cmd”, hstart /NOWINDOW /D=c:\scripts “c:\scripts\mybatch.bat”, hstart /NOCONSOLE “batch_file_1.bat” which do exactly the same. I am sure that you will find much more such kind of free utilities.
In some scenario (for example starting from UNC path) it is important to set also a working directory to some local path (
%SystemRoot%\system32 work always). This can be important for usage any from above listed variants of starting hidden batch.