it-swarm-ru.tech

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

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

144
Mohammad AL-Rawabdeh

Ваш вопрос довольно расплывчатый, но есть сообщение о ServerFault , которое может содержать необходимую вам информацию. Ответ там описывает, как запустить скрытое окно командного файла:

Вы можете запустить его без вывода сообщений, используя файл сценария Windows. Метод Run позволяет запускать скрипт в невидимом режиме. Создайте файл .vbs, как этот

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

и наметить это. Второй аргумент в этом примере устанавливает стиль окна. 0 означает «скрыть окно».

32
nhinkle

Это немного поздно, но я просто наткнулся на этот вопрос, когда искал ответ сам, и нашел это:

START /B program

которая в Windows наиболее близка к команде Linux:

program &

Из консольной системы HELP:

C:\>HELP START

Starts a separate window to run a specified program or command.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.
    path        Starting directory.
    B           Start application without creating a new window. The
                application has ^C handling ignored. Unless the application
                enables ^C processing, ^Break is the only way to interrupt
                the application.

Одна проблема, которую я видел с этим, состоит в том, что у вас есть больше чем одна программа, пишущая в окно консоли, это становится немного запутанным и перемешанным.

Чтобы он не взаимодействовал с пользователем, вы можете перенаправить вывод в файл:

START /B program > somefile.txt
217
Novicaine

Я подозреваю, что вы имеете в виду: запустить что-то в фоновом режиме и немедленно вернуть командную строку с продолжением запущенной программы.

START "" program

Какой Unix-эквивалент

program &
67
Paul Douglas
START /MIN program 

вышеупомянутый довольно близок с его аналогом Unix program &

11
Siva Sankaran

Вы можете использовать этот (прокомментированный!) Скрипт PowerShell:

# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc

Сохраните его как файл .ps1. После включения выполнения сценария (см. «Включение сценариев в вики-тег PowerShell» ), вы можете передать ему одну или две строки: имя исполняемого файла и, необязательно, строку аргументов. Например:

.\hideproc.ps1 'sc' 'stop SomeService'

Я подтверждаю, что это работает на Windows 10.

5
Ben N

Если вы хотите, чтобы программа командной строки запускалась без ведома пользователя, определите ее как службу Windows, и она будет выполняться по расписанию.

1
CarlF

Вот как мой PHP внутренний сервер переходит в фоновый режим. Технически это должно работать для всех.

start /B "" php -S 0.0.0.0:8000 &

Спасибо

1
Suyash Jain

Соответствующий ответ с двумя примерами:

  1. Ниже открывается calc.exe:

вызовите START/B "мой calc" "calc.exe"

  1. Иногда передний план нежелателен, тогда вы запускаете свернутый, как показано ниже:

вызовите START/MIN "my mongod" "% ProgramFiles%\MongoDB\Server\3.4\bin\mongod.exe"

0
Manohar Reddy Poreddy