2010-08-08 5 views
15

C# System.Diagnostics.Process.Start(executableName);에서 외부 응용 프로그램을 실행하는 방법을 알고 있지만 실행하려는 응용 프로그램에 Windows에서 실행 파일 확장명으로 인식 할 수없는 확장명이 있으면 어떻게됩니까? 제 경우에는 application.bin입니다.확장명이 .exe 인 외부 응용 프로그램 실행

답변

28

키가 이전 프로세스를 시작하기에 falseProcess.StartInfo.UseShellExecute 속성을 설정하는 것입니다, 예를 들면 :

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = @"c:\tmp\test.bin"; 
p.StartInfo.UseShellExecute = false; 
p.Start(); 

이 직접 프로세스를 시작합니다 : 대신 거치지은 "의를위한 실행 파일을 알아 내기 위해 노력하자 지정된 파일 확장자 "셸 논리 파일은 실행 파일로 간주됩니다.

또 다른 구문

같은 결과가있을 수 있습니다 달성하기 위해 :

var processStartInfo = new ProcessStartInfo 
{ 
    FileName = @"c:\tmp\test.bin", 
    UseShellExecute = false 
}; 
Process.Start(processStartInfo); 
+1

좋은 설명 – Chad

0

는 MDB의 항목에 따르십시오 : 완전히 파일의 경로를받을 경우에만 작동합니다. Windows가 파일에 대한 PATH 환경 변수를 검색하도록 허용하면 검색하는 모든 폴더에 ".exe"가 추가됩니다.

슬프게도, 위치가 사용자 파일에 설정된대로 PATH에 전적으로 의존하기 때문에 슬프게도이 작업은 제가 작업하고있는 프로젝트에서 고통 스럽습니다. 수동으로 파일을 찾아서 StartInfo.FileName 속성을 정규화 된 경로로 설정해야합니다.

+0

아 ... :-) 당신이에 대해 할 수있는 좀 오래된 DOS 트릭이있다 밝혀 : 파일 이름의 끝에 마침표를 추가하고 윈도우가없이 파일을 찾습니다 신장. StartInfo.FileName = "[appname]"으로 설정하십시오. 끝에 ".exe"를 추가하지 않아도됩니다. – Yelnic

2

그리고 @yelnic에서 계속하십시오. cmd.exe /C myapp을 사용해보세요. 조금 더 Process.Start()을 원할 때 매우 유용하다고 생각했습니다.

using (Process process = Process.Start("cmd.exe") 
{ 
    // `cmd` variable can contain your executable without an `exe` extension 
    process.Arguments = String.Format("/C \"{0} {1}\"", cmd, String.Join(" ", args)); 
    process.UseShellExecute = false; 
    process.RedirectStandardOutput = true; 
    process.Start(); 
    process.WaitForExit(); 
    output = process.StandardOutput.ReadToEnd(); 
} 
관련 문제