programing

다른 .EXE 파일을 실행하는 .BAT 파일의 명령 창 숨기기

projobs 2021. 1. 19. 20:55
반응형

다른 .EXE 파일을 실행하는 .BAT 파일의 명령 창 숨기기


이것은 Windows의 배치 파일입니다.

다음은 내 .bat 파일입니다.

@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"

"C:\ThirdParty.exe"

.bat 파일이 "ThirdParty"응용 프로그램이 실행되는 동안 명령 창을 열어 두는 것을 제외하고는 정상적으로 작동합니다.
닫으려면 명령 창이 필요합니다.

응용 프로그램에 대한 바로 가기를 사용하지만 먼저이 복사 명령을 실행할 수 있어야합니다 (실제로 응용 프로그램에 사용할 데이터베이스와 서버가 변경됨).

타사 응용 프로그램은 사용자가 db 또는 응용 프로그램 서버의 소스를 변경하는 것을 허용하지 않습니다.

이는 사용자가 테스트 환경에서 프로덕션 환경으로 변경할 수 있도록하기위한 것입니다.


start나를 위해 작품 사용 :

@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe

편집 : 좋아, 더 자세히 보면 start인용 된 경우 첫 번째 매개 변수를 새 창 제목으로 해석하는 것 같습니다. 따라서 ThirdParty.exe 경로를 인용해야하는 경우 제목 문자열도 제공해야합니다.

예 :

:: Title not needed:
start C:\ThirdParty.exe

:: Title needed
start "Third Party App" "C:\Program Files\Vendor\ThirdParty.exe"

다음 .vbs코드 파일을 만듭니다 .

CreateObject("Wscript.Shell").Run "your_batch.bat",0,True

이것은 숨겨진 상태로 .vbs실행됩니다 your_batch.bat.

나를 위해 잘 작동합니다.


이 시도:

@echo off 
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
exit

좋은 팁. Java 프로그램을 실행하는 배치 파일에서도 작동합니다.

start javaw -classpath "%CP%" main.Main

start스크립팅 언어를 사용하지 않는 한 사용하면 잘 작동합니다. 다행히도 Python을위한 방법이 있습니다. pythonw.exe대신 다음을 사용 python.exe하세요.

:: Title not needed:
start pythonw.exe application.py

따옴표가 필요한 경우 다음을 수행하십시오.

:: Title needed
start "Great Python App" pythonw.exe "C:\Program Files\Vendor\App\application.py"

기본적으로 그렇게하는 좋은 방법을 찾지 못했기 때문에 hstart 라는 유틸리티를 사용합니다 . 더 깔끔한 방법이 있다면 좋을 것입니다.


/ 스크립트 를 실행 하고 명령 프롬프트 창 생성을 완전히 억제 (따라서 표시되었다가 사라지는 것을 볼 수 없음)하고 선택적으로 출력을 지정된 파일에 기록 하는 내 silentbatch 프로그램 을 사용해 보는 것이 좋습니다..bat.cmd


창을 강제로 숨기는 VBS 스크립트를 만들 수 있습니다.

Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("""C:\Program Files (x86)\McKesson\HRS
Distributed\SwE.bat""", 0)
set WshShell = Nothing

그런 다음 배치 파일을 실행하는 대신 스크립트를 실행하십시오.


Batch2Exe http://www.f2ko.de/programs.php?lang=en&pid=b2e를 사용하여 배치 파일을 실행 파일로 컴파일합니다 . "보이지 않는 창"옵션을 사용하십시오.


또는 다음을 사용할 수 있습니다.

Start /d "the directory of the executable" /b "the name of the executable" "parameters of the executable" %1

% 1이 파일이면 실행 파일로 전달됩니다. 예를 들어 notepad.exe foo.txt% 1에서 "foo.txt"입니다.

/b시작 명령 매개 변수는 다음을 수행합니다.

새 명령 프롬프트 창을 열지 않고 응용 프로그램을 시작합니다. CTRL+ C처리는 응용 프로그램이 CTRL+ C처리를 활성화하지 않는 한 무시됩니다 . CTRL+ BREAK사용 하여 응용 프로그램을 중단합니다.

정확히 우리가 원하는 것입니다.


다른 사용자로 실행하십시오. 이것이 창 상자라고 가정하고 예약 된 작업에 대한 사용자 계정을 만듭니다. 해당 사용자로 실행하십시오. 명령 프롬프트는 현재 로그인 한 사용자에게만 표시됩니다.


위의 방법은 작동하지 않습니다. Windows Server 2003에서 테스트했습니다.

@echo off 
copy "C:\Remoting.config-Training" "C:\Remoting.config"
Start /I "" "C:\ThirdParty.exe"
exit

Windows API를 사용하여 새 프로세스, 콘솔 응용 프로그램을 시작하고 "검은 색"창을 숨길 수 있습니다. 이는 프로세스 생성시 수행 할 수 있으며 "검은 색"창을 전혀 표시하지 않도록합니다.

에서 의 CreateProcess 함수 dwCreationFlags매개 변수를 가질 수 CREATE_NO_WINDOW의 플래그 :

The process is a console application that is being run
without a console window. Therefore, the console handle
for the application is not set. This flag is ignored if
the application is not a console application

다음은 이 메서드와 소스 코드를 사용 하는 hide-win32-console-window 실행 파일에 대한 링크 입니다.

hide-win32-console-windowJamesdlin의 silentbatch 프로그램 과 유사합니다 .

열린 질문이 있습니다. 프로그램의 창이 존재하지 않을 때 프로그램의 출력을 어떻게해야합니까? 예외가 발생하면 어떻게됩니까? 출력을 버리는 좋은 해결책이 아닙니다. hide-win32-console-window익명 파이프를 사용하여 프로그램의 출력을 현재 디렉터리에 생성 된 파일로 리디렉션합니다.

용법

batchscript_starter.exe 전체 / 경로 / 대상 / 응용 프로그램 [ 전달할 인수 ]

Python 스크립트 실행 예

batchscript_starter.exe c:\Python27\python.exe -c "import time; print('prog start'); time.sleep(3.0); print('prog end');"

출력 파일은 python.2019-05-13-13-32-39.logpython 명령의 출력으로 명명 된 작업 디렉토리에 생성됩니다 .

prog start
prog end

실행 명령의 예

batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C dir .

출력 파일은 cmd.2019-05-13-13-37-28.logCMD의 출력으로 명명 된 작업 디렉터리에 생성됩니다 .

 Volume in drive Z is Storage
 Volume Serial Number is XXXX-YYYY

 Directory of hide_console_project\hide-win32-console-window

2019-05-13  13:37    <DIR>          .
2019-05-13  13:37    <DIR>          ..
2019-05-13  04:41            17,274 batchscript_starter.cpp
2018-04-10  01:08            46,227 batchscript_starter.ico
2019-05-12  11:27             7,042 batchscript_starter.rc
2019-05-12  11:27             1,451 batchscript_starter.sln
2019-05-12  21:51             8,943 batchscript_starter.vcxproj
2019-05-12  21:51             1,664 batchscript_starter.vcxproj.filters
2019-05-13  03:38             1,736 batchscript_starter.vcxproj.user
2019-05-13  13:37                 0 cmd.2019-05-13-13-37-28.log
2019-05-13  04:34             1,518 LICENSE
2019-05-13  13:32                22 python.2019-05-13-13-32-39.log
2019-05-13  04:55                82 README.md
2019-05-13  04:44             1,562 Resource.h
2018-04-10  01:08            46,227 small.ico
2019-05-13  04:44               630 targetver.h
2019-05-13  04:57    <DIR>          x64
              14 File(s)        134,378 bytes
               3 Dir(s)  ???,???,692,992 bytes free

.bat 스크립트 실행을위한 단축키 예

창없는 .bat 파일을 시작하기위한 바로 가기

Target 들:

C:\batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C C:\start_wiki.bat

Start in필드에 지정된 디렉토리 는 출력 파일을 보유합니다.


.exe 파일을 실행하는 .bat 파일의 명령 창을 최대한 빨리 종료 @start하려면 실행하려는 파일 앞에있는 줄을 사용하십시오 . 다음은 그 예입니다.

(insert other code here)
@start executable.exe
(insert other code here)

.NET과 함께 다른 코드를 사용할 필요가 없습니다 @start executable.exe.


이것을 사용하여 C #에서 cmd 파일을 시작했습니다.

Process proc = new Process();
proc.StartInfo.WorkingDirectory = "myWorkingDirectory";
proc.StartInfo.FileName = "myFileName.cmd";
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();

참조 URL : https://stackoverflow.com/questions/507347/hide-command-window-of-bat-file-that-executes-another-exe-file

반응형