Как я могу запустить пакетный файл Windows, но скрывая окно командной строки? Я не хочу, чтобы cmd.exe отображался на экране при выполнении файла. Возможно ли это?
Как я могу запустить пакетный файл Windows, но скрывать окно команды?
Ответ 1
Если вы пишете неуправляемую программу и используете CreateProcess API, тогда вы должны инициализировать параметр lpStartupInfo
типа STARTUPINFO, так что поле wShowWindow
структуры SW_HIDE и не забывайте использовать флаг STARTF_USESHOWWINDOW
в поле dwFlags
STARTUPINFO. Другой метод - использовать CREATE_NO_WINDOW параметра dwCreationFlags
. Этот же трюк работает также с ShellExecute и ShellExecuteEx.
Если вы пишете управляемое приложение, вы должны следовать советам http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx: initialize ProcessStartInfo
с CreateNoWindow = true
и UseShellExecute = false
, а затем использовать в качестве параметра. Точно так же, как и в случае, вы можете установить свойство WindowStyle
от ProcessStartInfo
до ProcessWindowStyle.Hidden
вместо или вместе с CreateNoWindow = true
.
Вы можете использовать VBS script, который вы начинаете с wcsript.exe. Внутри script вы можете использовать CreateObject("WScript.Shell")
, а затем Run с 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
работать всегда). Это может быть важно для использования любого из перечисленных выше вариантов запуска скрытой партии.
Ответ 2
С помощью С# очень легко запустить командную команду без открытия окна. Взгляните на следующий пример кода:
Process process = new Process();
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "doSomeBatch.bat";
process.Start();
Ответ 3
Для любого исполняемого файла вы можете запустить свою программу с помощью cmd с параметром "c":
cmd /c "your program address"\"YourFileName".bat
(- > если это пакетный файл!) В качестве окончательного решения я предлагаю создать файл .cmd и поместить в него эту команду:
cmd /c "your program address"\"YourFileName".bat
exit
Теперь запустите этот .cmd файл.
Ответ 4
Здесь Я собрал все способы, которые, как я знаю, для запуска скрытого процесса с пакетом без внешних инструментов. С готовностью к использованию скрипты (некоторые из них богаты опциями), и все они образуют командную строку. Там, где возможно, возвращается PID. Используемые инструменты: IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process и JScript.Net - но все они завернуты в .bat
.
Ответ 5
Собственная версия кода, написанная на языке С++, - это копирование/вставка из проекта, над которым я работаю под лицензией Boost Software.
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 );
Ответ 6
Этот маленький VBScript из technet делает трюк:
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, запустите его.
Док говорит, что он не тестировался в Win7, но я просто его протестировал, он отлично работает. Не будет отображаться окно для любого процесса, который вы запускаете
Ответ 7
Вы можете написать службу Windows, которая ничего не делает, кроме как выполнить пакетный файл. Поскольку службы запускаются в их собственном сеансе рабочего стола, окно команды не будет отображаться пользователем.
Ответ 8
Создайте ярлык для вашего bat
файла с помощью right-click
и выберите Create shortcut
.
right-click
в ярлыке, который вы создали, и щелкните по свойствам.
Нажмите на раскрывающийся список Run и выберите Minimized.
Ответ 9
Используйте Bat To Exe Converter и скомпилируйте Bat файл как исполняемый файл.
Шаги:
- Откройте Bat to Exe Converter
- Выберите файл Bat
- В параметрах выберите "Невидимое приложение"
- Закончить, нажав кнопку компиляции
Ответ 10
1, скачайте bat на exe-конвертер и установите его 2, Запустите летучую мышь в приложение exe 3, Загрузите изображения .pco, если вы хотите сделать красивый exe 4, укажите местоположение файла bat (c:\my.bat) 5, Укажите местоположение для сохранения exe (например: c:/my.exe) 6, выберите вкладку "Информация о версии" 7, Выберите файл значка (загруженное изображение .pco) 8, если вы хотите заполнить такую информацию, как версия, имя comapny и т.д. 9, измените вкладку на опцию 10, выберите невидимое приложение (это приведет к скрытию командной строки при запуске приложения) 11, выберите 32 бит (если вы выберете 64-битный exe, он будет работать только в 32-битной ОС) 12, Compile 13, Скопируйте exe в место, где файл bat был выполнен правильно 14, Запустите exe