ventana silencioso run pantalla ocultar negra ejecutar desde crear batch bat automaticamente archivo windows scripting batch-file

silencioso - ¿Cómo puedo ejecutar un archivo por lotes de Windows pero ocultar la ventana de comandos?



ocultar pantalla negra bat (10)

¿Cómo puedo ejecutar un archivo por lotes de Windows pero ocultando la ventana de comandos? No quiero que cmd.exe sea visible en la pantalla cuando se está ejecutando el archivo. es posible?


1, Descargue el convertidor bat to exe e instálelo 2, Ejecute la aplicación bat to exe 3, Descargue imágenes .pco si desea crear Exe 4 atractivo, especifique la ubicación del archivo bat (c: / my.bat) 5, Especifique la ubicación para guardar el archivo exe (ej .: c: /my.exe) 6, seleccione la ficha Información de la versión 7, elija el archivo de icono (imagen .pco descargada) 8, si desea completar la información como la versión, el nombre de la compañía, etc. 9 , cambie la pestaña a la opción 10, seleccione la aplicación invisible (Esto ocultará el símbolo del sistema mientras ejecuta la aplicación) 11, elija 32 bits (si selecciona 64 bits exe funcionará solo en el sistema operativo de 32 bits) 12, compilación 13, copia el exe de la ubicación donde el archivo bat se ejecutó correctamente 14, ejecuta el exe


Cree un acceso directo a su archivo bat haciendo right-click y seleccionando Create shortcut . Right-click en el acceso directo que creó y haga clic en Propiedades. Haga clic en el cuadro desplegable Ejecutar y seleccione Minimizado.


Este pequeño VBScript de technet hace el truco:

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)

Edite mybatch.bat en su nombre de archivo bat, guárdelo como vbs y ejecútelo.

Doc dice que no está probado en Win7, pero lo probé, funciona bien. No mostrará ninguna ventana para el proceso que ejecute


Para cualquier archivo ejecutable, puede ejecutar su programa usando cmd con el parámetro "c":

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

(-> si es un archivo por lotes!) Como solución final, sugiero que cree un archivo .cmd y coloque este comando en él:

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

Ahora solo ejecuta este archivo .cmd.


Puede escribir un servicio de Windows que no hace más que ejecutar su archivo por lotes. Dado que los servicios se ejecutan en su propia sesión de escritorio, el usuario no podrá ver la ventana de comandos.


Si escribe un programa no administrado y utiliza la API CreateProcess , debe inicializar el parámetro lpStartupInfo del tipo STARTUPINFO para que el campo wShowWindow de la estructura sea SW_HIDE y no olvide utilizar el indicador STARTF_USESHOWWINDOW en el campo dwFlags de STARTUPINFO . Otro método es usar el indicador dwCreationFlags parámetro dwCreationFlags . El mismo truco también funciona con las funciones ShellExecute y ShellExecuteEx .

Si escribe una aplicación administrada , debe seguir los consejos de http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx : inicializar ProcessStartInfo con CreateNoWindow = true y UseShellExecute = false y luego usar como un parámetro de. Exactamente como en el caso de que usted puede establecer la propiedad WindowStyle de ProcessStartInfo a ProcessWindowStyle.Hidden lugar o junto con CreateNoWindow = true .

Puede usar un script VBS que comience con wcsript.exe. Dentro de la secuencia de comandos puede usar CreateObject("WScript.Shell") y luego Run con 0 como el segundo parámetro ( intWindowStyle ). Ver http://www.robvanderwoude.com/files/runnhide_vbs.txt como un ejemplo. Puedo continuar con Kix, PowerShell , etc.

Si no desea escribir ningún programa, puede usar cualquier utilidad existente como CMDOW / RUN / HID "c: / SomeDir / MyBatch.cmd" , hstart / NOWINDOW / D = c: / scripts "c: / scripts / mybatch" .bat " , hstart / NOCONSOLE" batch_file_1.bat " que hacen exactamente lo mismo. Estoy seguro de que encontrarás mucho más ese tipo de utilidades gratuitas.

En algunos escenarios (por ejemplo, a partir de la ruta UNC ), es importante establecer también un directorio de trabajo en alguna ruta local ( %SystemRoot%/system32 siempre funciona). Esto puede ser importante para el uso de cualquiera de las variantes mencionadas anteriormente de inicio de lote oculto.


Usando C # es muy fácil comenzar un comando por lotes sin tener una ventana abierta. Eche un vistazo al siguiente ejemplo de código:

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


Utilice Bat To Exe Converter y compile el archivo Bat como un ejecutable.

Pasos:

  1. Conversor de Open Bat to Exe
  2. Seleccione su archivo Bat
  3. En las opciones, seleccione "Aplicación invisible"
  4. Termine presionando el botón de compilación

Versión codificada nativa de C ++ de la respuesta de Oleg: esta es una copia / pega de un proyecto en el que trabajo bajo la Licencia de software de 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 );


Here he compilado todas las formas que conozco para iniciar un proceso oculto con lotes sin herramientas externas. Con un script listo para usar (algunos de ellos ricos en opciones), y todos ellos forman una línea de comandos. Cuando sea posible también el PID se devuelve. Las herramientas utilizadas son IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process y JScript.Net, pero todas ellas envueltas en un archivo .bat .