Esta pergunta já tem uma resposta aqui:
No Windows XP, posso executar um arquivo em lotes (.bat ou .cmd), por meio de um atalho, sem uma "janela preta"?
Esta pergunta já tem uma resposta aqui:
No Windows XP, posso executar um arquivo em lotes (.bat ou .cmd), por meio de um atalho, sem uma "janela preta"?
Respostas:
Salve o seguinte como wscript, por exemplo, hidecmd.vbs após substituir "testing.bat" pelo nome do arquivo em lote.
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false
O segundo parâmetro de oShell.Run
é o intWindowStyle
valor que indica a aparência da janela do programa e o valor zero é para a janela oculta.
A referência está aqui http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx
.bat
arquivo como administartor usando este método?
Esta é apenas uma simplificação da resposta de Shaji. Você pode executar seu script em lote por meio de um script VBScript (.vbs) como este:
'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True
Isso executará seu arquivo em lotes sem nenhuma janela de comando mostrada.
.bat
arquivo como administrador usando este método?
Apenas para expandir as respostas "Usar scripts do Windows" (que considero melhores porque já estão incorporadas), veja como fazê-lo usando um único script de wrapper e passando o nome do arquivo em lotes "real" como parâmetro. Parâmetros adicionais serão transmitidos para o arquivo em lotes.
If WScript.Arguments.Count >= 1 Then
ReDim arr(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
Arg = WScript.Arguments(i)
If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
arr(i) = Arg
Next
RunCmd = Join(arr)
CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If
Por exemplo, salve o arquivo acima como em NoShell.vbs
algum lugar e chame:
NoShell.vbs c:\foo\my_batch_file.bat
Por fim, se você estiver procurando executá-lo em algum lugar que não entenda o arquivo .vbs (como "Ferramentas Externas" no Visual Studio), convém chamar C:\Windows\System32\wscript.exe
o arquivo vbs como seu primeiro parâmetro e o seu arquivo em lotes como o segundo.
"C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat
.
"C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat
. Não importa o que eu tente para o caminho - aspas duplas em torno de tudo,% 20 no lugar do espaço ou uma combinação desses dois, nada funciona. Recebo uma mensagem de erro informando que o arquivo não pode ser encontrado ou que nada acontece. Isso ocorre devido a erro do usuário do meu lado, uma limitação do Windows com o campo Destino para atalhos ou um problema com o script vbs no qual ele não manipula os caminhos de arquivos com espaços corretamente?
Use start com a opção '/ B'. Por exemplo:
@echo off
start /B go.bat
start /b
apenas executará o programa no console alocado no momento em vez de gerar um novo. De qualquer forma, você receberá um novo, já que o lote precisa ser executado com o cmd (que, por sua vez, [surpresa], abre um console).
SYSTEM
em C / C ++).
cmd /c foo.cmd
. Não há absolutamente nenhuma necessidade de usar start
nesses cenários e, eu diria que system
não deve ser usado a favor CreateProcess
. Ao iniciar um arquivo em lote, você já depende de uma plataforma; também pode usar as melhores ferramentas para o trabalho.
cmd /c
antes. O comando cmd é o que eu precisava no meu caso, mas todas as respostas Stackexchange eu encontrei até agora, cerca de um arquivo de lote executando outro arquivo de lote, têm respostas superiores para usar início ...
start /b go.bat
não alocará um novo console (ou seja, uma instância do conhost.exe - ou um encadeamento no csrss.exe antes do Windows 7). No entanto, isso fará uma bagunça, pois o script em lote é executado com uma nova instância do cmd.exe anexada ao mesmo console . Ambas as instâncias do shell competirão para ler as entradas do console, normalmente alternadas. Ele precisa /w
(por exemplo start /b /w go.bat
) para aguardar a segunda instância, que é semelhante ao uso cmd /c
se estiver usando system
. Além disso, se você estiver ligando CreateProcess
, execute go.bat
diretamente. Não há necessidade cmd /c
.
Código aberto GPL gratuito "Criar processo oculto"
http://www.commandline.co.uk/chp/
O Microsoft Security Essentials e provavelmente a maioria dos outros scanners de vírus / malware tratam o executável, chp.exe, como um vírus, porque oculta qualquer programa que você especificar exibindo uma janela ou um botão da barra de tarefas, assim como os vírus.
Não é um vírus. Ele não esconde que o processo de destino apareça no gerenciador de tarefas, por exemplo. E é claro que o código fonte está incluído para que você possa ver que é muito pequeno e não faz nada além de executar o programa que você fornecer.
Você nem precisa confiar que o chp.exe incluído foi realmente criado a partir dessa fonte. Você pode descartar o chp.exe incluído e compilar o seu a partir da fonte, e todas as ferramentas necessárias para fazer isso são gratuitas e podem ser baixadas.
Você também pode simplesmente criar um atalho para o arquivo .bat ou .cmd e clicar com o botão direito do mouse no atalho, Propriedades, guia Atalho, Executar: Minimizado. Em tarefas agendadas, use o atalho em vez do arquivo .bat / .cmd diretamente. Isso impedirá que uma janela seja exibida, mas um botão da barra de tarefas ainda aparecerá.
Você pode usar scripts de janela como o AutoIt .
Como exemplo, basta escrever isso no editor de script AutoIt. É bem simples
Run("C:\test\batchfile.bat", "", @SW_HIDE)
Se você deseja executá-lo em um loop,
$x=0
Do
Run("C:\test\batchfile.bat", "", @SW_HIDE)
Sleep(5000)
Until $x = 1
Compile-o como .exe - e pronto.
Da mesma forma, na AutoHotkey :
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
Usar início oculto (custa US $ 20)
Início oculto - Execute aplicativos e arquivos em lote sem uma janela do console ou prompt do UAC
Aplicativos de console e arquivos em lote são executados regularmente na inicialização do Windows ou em um agendamento. O principal inconveniente disso é que cada aplicativo abre uma janela do console que pisca na tela. O Hidden Start (ou Hstart) é um utilitário leve de linha de comando que permite executar aplicativos de console e arquivos em lote sem nenhuma janela em segundo plano, lidar com a elevação de privilégios de UAC no Windows 7 e Vista, iniciar vários comandos em paralelo ou de forma síncrona e muito mais .
Solução simples, sem usar nenhum programa extra.
Boa sorte!