Подтвердить что ты не робот

Как я могу запустить пакетный файл Windows, но скрывать окно команды?

Как я могу запустить пакетный файл Windows, но скрывая окно командной строки? Я не хочу, чтобы cmd.exe отображался на экране при выполнении файла. Возможно ли это?

4b9b3361

Ответ 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