2016-05-12 3 views
1

Ich möchte eine Batch-Datei auf versteckte Weise starten. This discussion beschreibt sehr gut, wie es gemacht werden kann: mit der CreateProcess API-Funktion. Mit dieser Methode ist mein gestartetes Batch-Skript nicht sichtbar.Kann ich eine Windows-Batch-Datei mit versteckten Cmd-Fenster ausführen, aber die Programme durch den Stapel gestartet sehen?

Das Problem ist jedoch, dass die Programme (exes) innerhalb der Charge auch versteckt sind!

Mein Ziel ist es, verstecken die gestartet Batch-Fenster aber zeigen die Fenster der Anwendungen innerhalb der Charge genannt.

Ist es möglich? Wenn das so ist, wie? Kann ich die CreateProcess Funktion dafür verwenden oder brauche ich eine andere?

+1

Könnten Sie den Code, den Sie in der Batch-Datei verwenden, hinzufügen, um die Programme zu Ihrer Frage zu starten? –

+0

z.B. 'helloworld.exe par1 par2' Das Szenario, das wir verwenden, ist, den Stapel zu starten, lassen Sie es einige Überprüfungen vornehmen, und lassen Sie es dann die Anwendung helloworld.exe mit einigen Eingabeparametern starten. – andreasgk

+0

Du könntest versuchen 'start cmd/k" helloworld.exe par1 par2 "' –

Antwort

0

Next kommentiert Batch-Skript möglich Ansatz zeigt sichtbar

  • eine andere Batch-Skript auszuführen:
    • cliParser.bat einfach listet alle angegebenen Parameter;
    • cliParseArg.bat macht die gleichen und Sätze errorlevel von Parametern zählen (Null-Basis so returs nie 0) durch exit /b %i%;
  • eine GUI-Anwendung: ausgeübte gemeinsame calc und notepad ausführbare Dateien;
  • eine Win32-Konsolenanwendung: cliParser.exe ist cliParser.bat umgeschrieben in C++;

aus einem unsichtbaren Befehlszeilenfenster. Beispiele, wie asynchron und synchron ausgeführt werden (d. H. Warten, bis die aufgerufene Anwendung beendet wird).

@ECHO OFF 
SETLOCAL EnableExtensions 

rem  STDOUT output is invisible if this script runs in a hidden window 
wmic OS get LocalDateTime 

rem  another batch script   asynchronously   => visible 
start "batch asyn" cmd /K ""D:\bat\cliParser.bat" par1 %* "par 3"" 

rem errorlevel clear: by virtue of Dave Benham in reply to http://superuser.com/a/649329/376602 
(call) 
rem  another batch script    synchronously   => visible 
start "batch synchr" /WAIT cmd /K "("D:\bat\cliParseArg.bat" par1 %* "par 3"&pause&exit /B %%%%errorlevel%%%%)" 
rem `pause` command in above line is merely for debugging purposes to ensure that window is visible 
echo cliParseArg.bat parameter count=%errorlevel% 
echo(

rem  a GUI application    asynchronously   => visible 
start "" calc.exe 

rem  a GUI application    synchronously   => visible 
notepad.exe 

rem  a console application   asynchronously   => visible 
start "CApp asyn" cmd /K ""D:\bat\cliParser.exe" rap1 %* "rap 3"" 

rem  a console application   synchronously   => visible 
start "CApp synchr" /WAIT cmd /K "("D:\bat\cliParser.exe" arg1 %* "arg 3"&exit /B)" 

rem  STDOUT output is invisible if this script runs in a hidden window 
cmd /C wmic OS get LocalDateTime 

Ausgang, wenn von einem sichtbaren cmd Fenster genannt und dann in einem versteckten Fenster ::

==> D:\bat\SO\37181230.bat "xx yy" 
LocalDateTime 
20160512195221.499000+120 

cliParseArg.bat parameter count=4 

LocalDateTime 
20160512195244.958000+120 

==> Wscript D:\VB_scripts\runhidden.vbs "D:\bat\SO\37181230.bat" "A1 B2" 

==> 

Die runhidden.vbs von Rob van der Woude's script angepasst ist, wo

  • strArguments = strArguments & " " & WScript.Arguments(i) Linie wurde
  • geändert
  • strArguments = strArguments & " """ & WScript.Arguments(i) & """"