2017-10-09 4 views
0

내가 시도이실행 실행 파일이

byte[] bytes = File.ReadAllBytes("Program.exe"); 
Assembly assembly = Assembly.Load(bytes); 
assembly.EntryPoint.Invoke(null, new object[0]); 

괜찮 컴파일하지만 난 그것을 실행할 때, 그것은 "

을 말한다 프로그램되지 고해상도 ... "이 함수가 될 수 있다면 시도 할 일이 또한 어떻게 든 exeproxy.exe 의 맥락에서 관리하지 않고 DLL을 실행 어떤 메신저

는 어떻게 든이 좋은 것 . 다음

using System; 
using System.IO; 
using System.Reflection; 

namespace exeproxy 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args.Length == 0) 
      { 
       Console.WriteLine("Usage: exeproxy <exe>"); 
       Environment.Exit(1); 
      } 
      string exe = args['0']; 
      byte[] bytes = File.ReadAllBytes(exe); 
      Assembly assembly = Assembly.Load(bytes); 
      assembly.EntryPoint.Invoke(null, new object[] { new string[0] }); 
     } 
    } 
} 

유용한 링크 http://www.c-sharpcorner.com/UploadFile/ajyadav123/executing-assembly-code-in-C-Sharp/

를 사용하여 비주얼 C++

임에 메신저 변경 코드는 asm()에 대한 링크보고 C++ 또는 VC++를 사용하는 것이 좋을 수도 있습니다. Calc.exe를 사용하여 작동하는지 테스트 할 수 있습니다. .net 프로그램을 실행하는 것이 전부는 아닙니다.

+0

.net 어셈블리가 아닌 어셈블리 태그를 제거했습니다. –

+1

@ PawełŁukasik : 사용할 수있는'.net-assembly' 태그가 있습니다. –

+0

@MichaelPetch thx, 다음 번에 추가 할 것입니다 –

답변

0

EntryPoint에 매개 변수를 전달하는 방법을 변경해야합니다. 호출 할 두 번째 매개 변수는 Main에 대한 매개 변수로 해석되는 객체의 배열입니다. 그러나 Main은 문자열 배열을 사용합니다. 따라서 통화는 다음과 같아야합니다.

assembly.EntryPoint.Invoke(null, new object[] { new string[0] }); 

콘솔에 인쇄하는 간단한 Program.exe에서 작동합니다. 보다 복잡한 프로그램의 경우 처리해야 할 문제가 더 많을 수 있습니다.

+0

gui가있는 프로그램의 경우 어떤 문제점이 있습니까? – Some0ne03370

+0

음, 이미 사용 해왔다는 것을 알 수 있습니다. 내가 말했듯이, 프로그램이 멈 추면 Program.exe가 그 이유 일 수 있습니다. 우리는 그 안에 무엇이 들어 있는지 알 수 없습니다. –

+0

이것은 일부 프로그램에서 어렵다고 생각합니다. https://github.com/OfficialNoob/exeproxy – Some0ne03370

관련 문제