2009-08-28 7 views
3

MemoryStream에있는 프로그램을 어떻게 실행하여 하드 디스크에 먼저 저장할 필요가 없습니까? 파일을 하드 디스크에 저장하지 못할 수도 있습니다. 프로그램은 메모리에서 100 % 기능을 수행해야합니다.MemoryStream에서 프로그램 실행

 static string strTemplate = "MyAPP.SOMEprogram.exe"; 
     byte[] template; 
     int len = 0; 

     Assembly assembly = Assembly.GetExecutingAssembly(); 
     using (Stream stream = assembly.GetManifestResourceStream(strTemplate)) 
     { 

      len = (int)stream.Length; 
      BinaryReader reader = new BinaryReader(stream); 
      template = reader.ReadBytes(len); 


     } 

     MemoryStream ms = new MemoryStream(template, true); 

이제 MemoryStream (RAM)의 모든 100 % 작동 프로그램이 해당 프로그램을 실행할 수 있습니까? 많은 감사합니다

+1

내가 관리되는 어셈블리를로드하는 것에 대한 이야기가 아니라고 가정합니다. –

답변

2

나는 이것을하는 데 obviouse 방법을 생각할 수 없다. 내가 생각할 수있는 가장 가까운 것은 RAM 디스크를 사용하는 것입니다. (아마도 페이징 외에) 하드 디스크에 액세스 할 필요는 없지만 여전히 묻고있는 것과는 매우 다릅니다.

참고로, 나는 관리되는 어셈블리를로드하지 않고 임의의 프로그램을 실행하는 것에 대해 이야기하고 있습니다.

+0

좋아, 당신은 가장 유용한 의견을 어떻게 C#에서 RAM 디스크를 만들 수 있습니까? –

+1

드라이버를 설치하고 드라이버 API를 호출하여 새 RAM 디스크를 만든 다음 모든 일반 드라이브처럼 사용할 수 있습니다. 프로그램을 RAM 디스크의 파일에 작성하고 실행하십시오. http://www.mydigitallife.info/2007/05/27/free-ramdisk-for-windows-vista-xp-2000-and-2003-server/ 여러 RAM 디스크 드라이버를 나열합니다. 일부는 소스와 함께 제공되지만 방법은 정확히 드라이버를 설치하고 상호 작용하는 것은 아마도 당신이 선택한 드라이버에 크게 의존 할 것입니다. 문서 및 소스 (사용 가능한 경우)를 읽은 다음 계속하는 방법을 확인해야합니다. –

+0

고마워,하지만 모든 문제는 내가 아니고 사용자가 프로그램을 실행 한 frm을보고 싶지 않으며 복사 방지가 필요하다면 램 디스크가 도움이 될까요? –

1

시도해 볼 수는 있지만 코드 액세스 권한을 피해야 할 수도 있습니다.

+0

네, 맞습니다 Assembly.Load (byte []),하지만 바이트 [] 배열에 .net 프로그램이 들어있는 경우에만 작동합니다. 그렇지 않으면 작동하지 않습니다. 맞습니까? –

+2

네가 맞습니다. .net 앱 내에서 리소스로 임베드 된 네이티브 애플리케이션을 실행하려면 질문을 업데이트하십시오. –

1

여기서 중요한 것은 바이트 배열 see에서 메모리에 어셈블리를 빌드 /로드하는 것입니다. 어셈블리에 대한 참조가 있으면 해당 유형에 쉽게 액세스하고 인스턴스를 인스턴스화 할 수 있습니다. 일단 유형 인스턴스가 있으면 메소드를 호출하여 프로그램을 "실행"합니다.

+0

Assembly .. ::. Load 메서드 (배열 []) 은 C++로 작성된 프로그램과 C#으로 작성된 프로그램에서 작동하지 않습니다. 감사합니다 –

+0

Nope도 C#에서 작동합니다. C++ 용 –

+0

이 작동합니까 ??? –