Как я могу выполнить командную строку Windows в фоновом режиме, не взаимодействуя с активным пользователем?
Как я могу выполнить командную строку Windows в фоновом режиме, не взаимодействуя с активным пользователем?
Ответы:
Ваш вопрос довольно расплывчатый, но на 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 означает «скрыть окно».
Это немного поздно, но я просто наткнулся на этот вопрос, когда искал ответ сам, и нашел это:
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
start /B "" program
он работал ...
Я подозреваю, что вы имеете в виду: запустить что-то в фоновом режиме и немедленно вернуть командную строку с продолжением запущенной программы.
START "" program
Какой Unix-эквивалент
program &
start
? Он не работает без него (выполняет только новый экземпляр команды), но start
справка ничего об этом не говорит, в нем говорится, что все параметры являются опциональными (или я не понимаю этого).
start
работает без пустого параметра для меня, но я, кажется, получаю оболочки с отдельной конфигурацией, когда я использую пустой параметр, поскольку настройка, которую я сделал, когда у меня не было пустого параметра, не используется, когда я использую пустой параметр. Интересно, почему они используют отдельные конфигурации?
START "" program
запускает для меня команду в новом терминале, в то время как program &
в Unix запускает команду и выводит вывод на тот же терминал.
START /MIN program
вышеупомянутый довольно близко с его аналогом Unix program &
Вы можете использовать этот (прокомментированный!) Скрипт 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.
Вот как мой внутренний сервер PHP переходит в фоновый режим. Технически это должно работать для всех.
start /B "" php -S 0.0.0.0:8000 &
Спасибо
Если вы хотите, чтобы программа командной строки запускалась без ведома пользователя, определите ее как службу Windows, и она будет выполняться по расписанию.
schtasks
команду в Windows XP и выше (предупреждение: schtasks
сложно).
Соответствующий ответ с 2 примерами:
вызовите START / B "мой calc" "calc.exe"
вызовите START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"
call Start /MIN "c" "calc.exe"
SW_*
с CreateProcessW
помощью STARTUPINFO::wShowWindow
( в том числе SW_HIDE
).
Вы можете увидеть правильный способ сделать это по этой ссылке:
Как запустить запланированную задачу без появления командного окна
Подводя итог, вы должны установить флажок «Запускать, вошел ли пользователь в систему или нет». Учетные данные пользователя задачи следует вводить после нажатия «ОК».
только что наткнулся на этот поток Windows 7, используя Power Shell, запускает исполняемые файлы в фоновом режиме, точно так же, как имя файла Unix &
пример: start -NoNewWindow filename
помочь начать
NAME Start-Process
SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-Redirectutput] [-Red [-WindowStyle {Normal | Скрытый | Минимизировано | Развернуто}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
Псевдоним соки начало