2010-03-04 3 views
7

이상한 상황입니다.하지만 EXE 파일 (또는 어셈블리 코드)을 프로젝트에 임베드하여 응용 프로그램에서만 시작할 수 있습니다. 파일 시스템에 EXE 파일을 생성하고 시작하지 마십시오.) ....NET : 내 프로젝트에 EXE 파일을 임베드하십시오.

가능합니까?

편집 :

이것은 .NET EXE가 아닙니다. 어쨌든 EXE는 닷넷 어셈블리 인 경우, 당신은 당신의 (외부) 프로그램의 컴파일 된 바이너리를 포함하여로드 할 수 내 프로젝트에 리소스로 Test.exe라는 파일을 추가하고 나는이

Dim exestr As Stream = Nothing 
    Dim a As Assembly = Assembly.GetExecutingAssembly 
    exestr = a.GetManifestResourceStream("Test.exe") 
+0

이것은 불가능합니다. 왜 이러는거야? – SLaks

답변

2

RAM disk을 작성하고 .NET 리소스 파일에서 exe 파일을 작성한 다음 거기에서 파일을 실행하십시오. 물리적 디스크를 건드리지 마십시오.

프로그래밍 가능한 RAM 디스크 API에 대한 링크가 없지만 프로그램에서 조작 할만한 것을 찾을 수 있습니다. 다른 이점은 바이러스 스캐너가 보안을 위해이를 계속 인식 할 수 있다는 것입니다.

또한 귀하의 응용 프로그램이 디스크에서 실행되고 있다면 문제가되는 실행 파일이 디스크에있을 수없는 이유가 없습니다. 네트워크를 통해 다운로드하거나 (다운로드하는 경우) 디스크에 먼저 저장하고 실행이 완료되면 지우기.

+0

고맙습니다. 노력하고 싶습니다. 어쨌든 두 번째 파일을 복사해서는 안되기 때문에 파일을 쓰고 싶지는 않습니다. 그들이 원할 때 exe를 시작합니다. – Marcx

+0

결국 RAM 디스크 솔루션 이었습니까? 그냥 궁금해서. 그렇다면 어떤 소프트웨어를 사용하여 구현 했습니까? –

+0

이 문제는 RAM 디스크에 이미 타사 소프트웨어가 설치되어 있어야한다는 것입니다. 당신이 그렇게 할 수 있다면 왜 그냥 파일 시스템에 쓸 수 없습니까? – jcmcbeth

4

했다 Assembly.Load(byte[]). EDIT : 그렇지 않으므로 할 수 없습니다.

어셈블리를로드 한 후에 다른 어셈블리와 마찬가지로 내부 어셈블리 (예 : Main 메서드)에서 함수를 호출하거나 AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName)을 작성할 수 있습니다.

+0

은 첫 번째 게시물을 업데이트했습니다 ... exe는 .net exe ..가 아닙니다. – Marcx

+0

참고로이 답변을 계속하겠습니다. – SLaks

+0

+1 유용한 정보. – si618

5

불가능합니다. 이것은 Dave Cutler와 공동 작업자가 Windows NT를 설계 할 때 수행 한 핵심 설계 결정이었습니다. 프로세스는이어야하며 파일 시스템의 파일로 백업해야합니다. Windows는 메모리 매핑 된 파일을 사용하여 프로세스 코드를 가상 메모리에 매핑합니다. 많은 코드가 JIT를 메모리로 컴파일하더라도 .NET 프로그램에서는 다르지 않습니다. IL을 포함하는 어셈블리는 동일한 방식으로 매핑됩니다.

사용자 및 바이러스 스캐너는 단순히 효율적인 운영 체제 이상의 기능을 수행하는 데 적합합니다. 실제로 실행 코드가 갑자기 나타나지 않는 것이 좋습니다.