2014-06-16 1 views
0

.net 실행 파일 (C#/VB.Net)을 시작할 때 .net 어셈블리를로드 할 C/C++ 파일과 같은 ntive 바이너리에 포함시키는 방법이 있습니까? 네이티브 벽 arround를 구축하는 것과 마찬가지로 .net 어셈블리?네이티브 실행 파일에 .net 바이너리 포함하기

+0

.NET FW를 설치하지 않고 실행 하시겠습니까? 아니면 목적이 무엇입니까? – ChrFin

+2

혼합 어셈블리를 의미하는 경우? [here] (http://msdn.microsoft.com/en-us/library/x0w2664k.aspx) – AlirezaJ

+0

@chrfin : 아니, 여전히 FW가 필요합니다. 그 이유는 보안을 개선하기 위해서입니다. – user3694177

답변

2

.NET 바이너리를 C++ 프로젝트에 리소스로 포함하고 런타임에로드 할 수는 있지만 보안 강화를 위해 권장되는 방법은 아닌지 의심 스럽습니다.

편집 : 누군가 소스 코드를 요청했는데 답 대신 의견을 제시 할 것을 제안했습니다. 방금 StackOverflow에 가입했습니다. 아직 코멘트를 올릴만큼 충분한 평판이 없습니다. 그러나 여기 내가 어떤 점에서 사용되는 몇 가지 소스입니다 :

public static int RunInternalExe(byte[] rawData, params string[] args) 
    { 
     Assembly asm = Assembly.Load(rawData); 
     MethodInfo mi = asm.EntryPoint; 

     if (mi == null) 
      throw new Exception("Entry point not found"); 

     ParameterInfo[] prms = mi.GetParameters(); 

     object[] mtd_args = null; 
     if (prms.Length > 0) 
      mtd_args = new object[] { args }; 

     object result = mi.Invoke(null, mtd_args); 

     if (result is int) 
      return (int)result; 

     return 0; 
    } 

가 삽입 당신의 래퍼 .exe로 .EXE 관리 위의 PROC에 원시 데이터를 전달합니다.

MyTools.RunInternalExe(Resources.ExeData); 

은 당연히, 당신이 당신의 래퍼 .EXE이 원하는 경우에 당신이 C로 ++ 또는 원하는 다른 언어 위의 코드를 변환 할 거라고 관리되지 않는, 즉 지금 내 머리 위에 가지입니다 ..

+0

정확히 어떻게? Windows 로더에는로드 가능한 바이너리 (.exe 또는 .dll)가 실제 디스크상의 파일이어야합니다. –

+0

Not .NET 실행 파일은 Windows 로더에서로드하지 않습니다. Assembly.Load (byte [])가 지원됩니다. 나쁜 생각. –

+0

외부 리소스 (예 : 일부 소스 코드)에 대한 링크를 추가하여 답변에 신뢰성을 추가하는 경우 도움이됩니다. 지금 그것은 정말로 코멘트로서 더 잘 나타납니다. – Neolisk

관련 문제