Questão Como posso executar uma linha de comando do Windows em segundo plano?


Como posso executar uma linha de comando do Windows em segundo plano, sem interagir com o usuário ativo?


128


origem


Você pode especificar o que você quer fazer? Você deseja executar um comando na linha de comando em segundo plano ou deseja executar toda a linha de comando em segundo plano, portanto, não é visível da área de trabalho? - omnibrain
Eu preciso de dois bastão executar um comando na linha de comando em segundo plano ou você deseja executar toda a linha de comando no fundo - Mohammad AL-Rawabdeh
Duplicatas esta pergunta no ServerFault. - Dan Dascalescu


Respostas:


Sua pergunta é bem vaga, mas há uma postar no ServerFault que pode conter a informação que você precisa. A resposta lá descreve como executar uma janela de arquivo de lote oculta:

Você poderia executá-lo silenciosamente usando um arquivo de script do Windows. A corrida   Método permite que você execute um script no modo invisível. Crie um .vbs   arquivo como este

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

e agendar. O segundo argumento neste exemplo define a janela   estilo. 0 significa "esconder a janela".


25



Isto é perfeito. O SetPoint para Logitech nunca, NUNCA, inicia com o Windows. Eu tenho começado manualmente por cerca de 3 anos agora. Importa onde o lote é? Eu vi algumas pessoas colocar esse tipo de arquivo em lotes em C ou a raiz. - ejbytes


Isso é um pouco tarde, mas eu acabei de encontrar essa pergunta enquanto procurava a resposta e descobri o seguinte:

START /B program

que, no Windows, é o mais próximo do comando do Linux:

program &

Do sistema de ajuda 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 eu vi com isso é que você tem mais de um programa escrevendo para a janela do console, fica um pouco confuso e confuso.

Para que não interaja com o usuário, você pode redirecionar a saída para um arquivo:

START /B program > somefile.txt

187



Eu gosto desta resposta melhor porque não abre outra janela de comando - wisbucky
Isso não parece funcionar para mim, parece que apenas criar uma nova instância de cmd [?], No entanto, se eu executar como start /B "" program então funcionou ... - rogerdpack
@rogerdpack Isso mesmo. Por algum motivo, com o Windows 7, este é o formato de comando. O "" é o parâmetro de título obrigatório. - ejbytes
Infelizmente, se eu sair da janela do shell em que eu criei o processo, parece que o processo também termina. - palswim
@Qwerty: Olhe para o MSDN para SetConsoleCtrlHandler - Zan Lynx


Eu suspeito que você quer dizer: Execute algo em segundo plano e obtenha a linha de comando imediatamente, com o programa iniciado em andamento.

START "" program

Qual é o equivalente Unix de

program &

59



qual é o equivalente fg? Podemos fechar o prompt de comando e o porgram ainda será executado? - Nenotlep
Além disso, eu quero executar um programa no prompt de comando e retornar a ele de vez em quando, como na tela - isso é factível com isso? Eu preciso ser capaz de fechar o prompt de comando, mas manter o programa em execução utilizável. - Nenotlep
Qual é esse parâmetro vazio de start? Não funciona sem ele (executa apenas uma nova instância de comando), mas startA ajuda não diz nada sobre isso, ele afirma que todos os parâmetros são optinais (ou eu não entendo isso). - Dawid Ferenczy
@DawidFerenczy start funciona sem o parâmetro vazio para mim, mas eu pareço ter um shells com uma configuração separada quando eu uso o parâmetro vazio, como uma configuração que eu fiz quando eu não tinha o parâmetro vazio não é usado quando eu uso o vazio parâmetro. Eu me pergunto por que eles usam configurações separadas? - HelloGoodbye
@Paulo 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. - HelloGoodbye


START /MIN program 

o acima é muito mais próximo com o seu homólogo Unix program &


10





Você pode usar este script (comentado!) 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 como um .ps1 Arquivo. Depois de habilitar a execução do script (consulte Ativando Scripts em o wiki da tag do PowerShell), você pode passar uma ou duas seqüências: o nome do executável e, opcionalmente, a linha de argumentos. Por exemplo:

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

Eu confirmo que isso funciona no Windows 10.


5



sim start / b não funciona mais. - Sajuuk


Se você quiser 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 em um agendamento.


1



como você faz isso? - barlop
Alternativamente, você pode torná-lo uma tarefa agendada - Painel de Controle-> Ferramentas Administrativas-> Tarefas Agendadas ou usar o schtasks comando no Windows XP e acima (aviso: schtasks é complicado). - LawrenceC


É assim que meu servidor interno do PHP entra em segundo plano. Então, tecnicamente, deveria funcionar para todos.

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

obrigado


1





Uma resposta relacionada, com 2 exemplos:

  1. Abaixo abre calc.exe:

chamar START / B "meu calc" "calc.exe"

  1. Às vezes o primeiro plano não é desejável, então você executa minimizado como abaixo:

chamar START / MIN "meu mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"


0



Isso não parece ser minimizado: call Start /MIN "c" "calc.exe" - moondra
correto, ele funciona para o bloco de notas: início de chamada / min "n" "notepad.exe" - Manohar Reddy Poreddy
Por isso, funciona para aplicativos em janelas, mas não para aplicativos de console. Figuras, como se pode passar o SW_* para CreateProcessW através da STARTUPINFO::wShowWindow (Incluindo SW_HIDE). - 0xC0000022L
O que é um comando completo, com acima como "start" ou outra ferramenta? precisamos escrever outro programa? - Manohar Reddy Poreddy