2009-08-28 16 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); 

今(RAM上)のMemoryStream内のすべての100%の作業プログラムは、私はそのプログラムを実行することができますか? ありがとうございました

+1

あなたは管理されたアセンブリを読み込むだけではないと思いますよね? –

答えて

2

私はこれをやっているとは思いません。私が考えることのできる最も近いものは、RAMディスクを使用していることです。あなたはハードディスクへのアクセスはありませんが(おそらくページングに加えて)、これは依然としてあなたが求めているものとは非常に異なります。

私は、管理対象アセンブリを読み込まず、任意のプログラムを実行することについて言及しています。

+0

あなたは、最も有用なコメントを書いています。どうすればC#でRAMディスクを作ることができますか? –

+1

ドライバをインストールし、新しいRAMディスクを作成するためにドライバAPIを呼び出してから、普通のドライブと同じように使用することができます。プログラムをRAMディスク上のファイルに書き込んで実行します。 http://www.mydigitallife.info/2007/05/27/free-ramdisk-for-windows-vista-xp-2000-and-2003-server/いくつかのRAMディスクドライバを一覧表示していますが、一部にはソースが付属していますが、正確にドライバをインストールし、それと対話することは、おそらくあなたが選んだドライバに大きく依存します。ドキュメントとソース(利用可能な場合)を読み始め、次に続ける方法を見てください。 –

+0

ありがとう、しかし、すべての問題は私も、ユーザーがプログラムが実行されたfrmを見たいと思っていません、私はコピー防止、RAMディスクがここに役立つことが欲しいですか? –

1

Assembly.Load(byte[])を試すことができますが、コードのアクセス許可を回避する必要があります。また、一部のウイルス対策では、そのようにすることができない場合があります。

+0

はいあなたは正しいAssembly.Load(byte [])ですが、バイト[]配列に.netプログラムが含まれている場合にのみ動作し、そうでない場合は正しく動作しますか? –

+2

はい、あなたは正しいです。 .netアプリケーション内でリソースとして埋め込まれたネイティブアプリケーションを実行する場合は、これを言いたいことを質問を更新してください。 –

1

ここで重要な点は、バイト配列seeからメモリ内にアセンブリをビルド/ロードすることです。アセンブリへの参照を取得したら、その型に簡単にアクセスしてインスタンス化できます。型インスタンスが取得されると、メソッドを呼び出してプログラムを実行します。

+0

Assembly .. ::。Loadメソッド(配列 []) は、C++で書かれたプログラムで、これは動作しますか? ありがとう –

+0

NopeもC#で動作します。 C++用の –

+0

は動作しますか? –