2014-11-26 4 views
2

Path.GetTempFileName에 의해 반환 된 파일에 포함 된 리소스로 저장된 기본 EXE를 작성하고 있습니다. 이 기능은 경쟁 조건을 피하는 구현 세부 사항을 무시하게하므로 바람직합니다. 유일한 단점은 확장자가 .tmp 인 파일 이름을 반환한다는 것입니다.임시 파일 이름과 함께 저장된 exe를 실행할 수있는 방법이 있습니까?

Process.Start은 내 시스템의 메모장에서 tmp-named-exe 파일을 엽니 다. 분명히 p/invoke (https://stackoverflow.com/a/12681219/521757 참조)를 사용하여 수동으로 클래스와 동사를 지정할 수 있습니다. 전에 .NET Framework를 사용하여 동일한 작업을 수행 할 수있는 방법이 있습니까?

+1

'Process.Start()'에 전달하기 전에 .tmp를 .exe로 변경하십시오. 확장명이없는 파일 이름이 무작위로 지정되었으므로 명명 충돌이 없습니다. – kennyzx

+0

또는 .tmp.exe –

+0

의 끝에 cat .exe 만 사용 가능 이론적으로 다른 프로세스가 GetTempFileName 프로세스의 일부로 만들어지지 않았기 때문에 같은 이름으로 착륙하는 것이 가능합니다. 게다가 생성 된'tmp' 파일을 삭제해야합니다. 어느 쪽이든, 저는 여전히 클래스/동사를 강요하는 것에 대해 궁금합니다. – jnm2

답변

4

을 위해 일한다, 예를 들면 :

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

이 의지 프로세스를 직접 시작하면 파일 자체가 실행 가능해야합니다. 너에게 효과가 있니?

+0

UseShellExecute가 기본적으로 true라는 것을 알지 못했습니다. 실제로 질문에 답변 해 주셔서 감사합니다! – jnm2

+0

나는 당신 앞에서 같은 대답을 썼다는 것이 이상하지만, 2 점을 받고 플러스 대답을 받았다. – faby

+0

거의 똑같은 대답이다. 그 때 내가 입력 할 때 도움이된다면 몇 초만 더 기다려야합니다. 미안합니다 :) –

1

이 나는 ​​그것이 .. 전에 프로세스를 시작으로 False로 Process.StartInfo.UseShellExecute 속성을 설정 가능하다고 생각하면

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
proc.StartInfo.FileName = //your filename .tmp 
proc.StartInfo.UseShellExecute = false; 
proc.Start(); 
2

Path.GetRandomFileName()Path.GetTempPath()과 함께 사용하지 않으시겠습니까?
이 방법을 사용하면 여전히 고유 한 임시 파일 및 경로 이름이 있으며 '.exe'를 추가하여 '.tmp'확장명을 가진 파일을 실행할 때의 현재 문제를 제거 할 수 있습니다.

임시 파일을 사용한 후에는 임시 파일을 삭제해야한다는 점을 기억하십시오. 특히 Path.GetTempFileName()을 사용하는 경우 임시 파일에 도달하면 문제가 발생할 수 있으므로 삭제하시기 바랍니다. 프로덕션 코드에서 실제로 발생하는 상황을 디버깅하는 것은 매우 실망 스럽습니다.

관련 문제