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:
- Conversor de Open Bat to Exe
- Seleccione su archivo Bat
- En las opciones, seleccione "Aplicación invisible"
- 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
.