Como posso executar uma linha de comando do Windows em segundo plano, sem interagir com o usuário ativo?
Como posso executar uma linha de comando do Windows em segundo plano, sem interagir com o usuário ativo?
Respostas:
Sua pergunta é bastante vaga, mas há uma postagem no ServerFault que pode conter as informações necessárias. A resposta lá descreve como executar uma janela de arquivo em lotes oculta:
Você pode executá-lo silenciosamente usando um arquivo de script do Windows. O método Run permite executar um script no modo invisível. Crie um
.vbs
arquivo como esteDim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
e agende. O segundo argumento neste exemplo define o estilo da janela. 0 significa "ocultar a janela".
É um pouco tarde, mas acabei de me deparar com essa pergunta enquanto procurava a resposta pessoalmente e encontrei o seguinte:
START /B program
qual, no Windows, é o mais próximo do comando Linux:
program &
No sistema HELP do console:
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.
Um problema que vi com ele é que você tem mais de um programa gravando na janela do console, fica um pouco confuso e confuso.
Para que ele não interaja com o usuário, você pode redirecionar a saída para um arquivo:
START /B program > somefile.txt
start /B "" program
então ele trabalhou ...
Eu suspeito que você quer dizer: Execute algo em segundo plano e recupere a linha de comando imediatamente, com o programa iniciado continuando.
START "" program
Qual é o equivalente Unix de
program &
start
? Ele não funciona sem ele (executa apenas uma nova instância de comando), mas start
a ajuda da Microsoft não diz nada sobre isso, ele afirma que todos os parâmetros são opcionais (ou eu não o entendo).
start
funciona sem o parâmetro vazio para mim, mas parece que recebo conchas com uma configuração separada quando uso o parâmetro vazio, pois uma configuração que fiz quando não tinha o parâmetro vazio não é usada quando uso o parâmetro vazio. Gostaria de saber por que eles usam configurações separadas?
START "" program
inicia um comando em um novo terminal para mim, enquanto program &
no Unix executa o comando e imprime a saída no mesmo terminal.
START /MIN program
o acima está bem mais próximo com o seu homólogo do Unix program &
Você pode usar este script (comentado!) Do 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
Salve-o como um .ps1
arquivo. Depois de ativar a execução do script (consulte Habilitando scripts no wiki da tag PowerShell ), você pode transmitir uma ou duas cadeias: o nome do executável e, opcionalmente, a linha de argumentos. Por exemplo:
.\hideproc.ps1 'sc' 'stop SomeService'
Confirmo que isso funciona no Windows 10.
É assim que meu servidor interno PHP entra em segundo plano. Então, tecnicamente, deve funcionar para todos.
start /B "" php -S 0.0.0.0:8000 &
obrigado
Se você deseja que o programa de linha de comando seja executado sem que o usuário saiba, defina-o como um Serviço do Windows e ele será executado de acordo com uma programação.
schtasks
comando no Windows XP e superior (aviso: schtasks
é complicado).
Uma resposta relacionada, com 2 exemplos:
chame START / B "my calc" "calc.exe"
chame START / MIN "meu mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"
call Start /MIN "c" "calc.exe"
SW_*
para a CreateProcessW
via STARTUPINFO::wShowWindow
(inclusive SW_HIDE
).
Você pode ver a maneira correta de fazer isso neste link:
Como executar uma tarefa agendada sem aparecer uma janela de comando
Resumindo, você deve marcar a caixa 'Executar se o usuário estiver conectado ou não'. As credenciais do usuário da tarefa devem ser inseridas após pressionar 'Ok'.
acabei de encontrar esse tópico O Windows 7, usando o Power Shell, executa executáveis em segundo plano, exatamente o mesmo que o nome do arquivo unix &
exemplo: start -NoNewWindow filename
ajudar a começar
NAME Processo inicial
Processo de inicialização SYNTAX [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-RedirectStand] [-WindowStyle {Normal | Oculto | Minimizado | Maximizado}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
ALIASES iniciam saps