2009-02-21 9 views
6

に* .exeファイルを組み込みを知っていますか?誰かが私がdllファイルにexeファイルをembeddすることができますどのようにDLL

私はC#のコードから呼び出すexeファイルであるツールを持っています。

事は、私は、このツール(EXEファイル)と私のC#のコードをcontaing DLLを含む1つのdllを持つようにしたいということです。

それは資源の中、このexeファイルをembeddすることは可能ですか?

Thxを事前に

+0

この質問は組み込みシステムには実際には関係ないので、「埋め込み」タグは削除しました。 –

答えて

9

です。任意のファイルをアプリケーションのRC_DATAとしてリソースとして追加することができます。しかし、私はあなたがそれを呼び出す前にディスクに最初にそれを抽出する必要があると信じています!

使用しているIDE /言語はどれですか?

[編集]

大変申し訳ございません。あなたはC#を使っていると言いました。

  1. 右IDEでアプリケーションをクリックして、「新しい項目の追加」を選択します(アプリケーションにリソースファイルを追加します。
  2. 既存のファイルを追加するために、リソースエディタのツールバーを使用してください。
  3. 次にいつでもexeファイルを抽出 System.IO.File.WriteAllBytes(@ "C:\ MyEXE \"、Resource1.MyEXE)のようなコードの何かを呼び出すことにより、必要な;
+1

ルールは、あなたがバイト[]からアセンブリをロードできることを除いて、ファイルを作成する必要はありません。 – leppie

+0

同じルールがあります....(oops typo) – leppie

+0

あなたの答えは です。最後に、とにかく実行するにはファイルシステムに書き込む必要がありますか?これをせずに実行する可能性はありませんか? – GillouX

7

それはあなたの用途はあまりないかもしれないことを心に留めてむき出しに価値がありますあなたがこれをやってくれて嬉しいです。駆除するDLLに制御権を持たない実行可能ファイルを埋め込むことで、マシン上でトロイの木馬を実行する心配はおそらくあります。

これは、ファイルシステムに.EXEを残して、あなたのアプリケーションが何をしているかについての透明性が良いでしょう。

+5

これは本当に有効な問題ではありません。ユーザーが私のDLLを実行している場合、明らかに私を信頼します。あなたが使っているアプリケーションによって起動されたすべてのヘルパー実行可能ファイルを見たことがありますか? – tster

2

アセンブリをバイト[]からロードできます。これは、埋め込みリソースのManifestResourceStreamを介して取得できます。

1

代替案は、.exeファイル自体を埋め込むのではなく、DLL内のその機能を含む、それを実行する[1] Rundll32の使用しないようにしてもよいです。

+0

それも私の選択だろう...私がこれを読むまでOld New Thingの投稿:[いつrundll32を使うべきかについての指針は?簡単:それを使用しない](http://blogs.msdn.com/b/oldnewthing/archive/2013/01/04/10382242.aspx) –

+0

@VáclavSlavík:link broken; [ここに新しいものがあります](https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643)。 – hydroiodic

-1

ファイルからリソースをディスクにプルしてコードを実行すると、Windows Data Execution Preventionがトリガされる可能性があることを覚えておいてください。基本的に、Windowsは何かがコードまたはデータそれがデータ(リソースとなる)のように見える場合、そのデータがコードとして実行されないようにします。

.NETアセンブリをローカルドライブではなくネットワーク上で使用する場合、これは特に問題になります。これが正しく動作しないようにする.NETセキュリティ設定があります。

プロジェクトの詳細を知らない別のオプションでは、これを塩分で処理します:好奇心を抱くユーザーやIT担当者に、実行可能ファイルがある理由を説明する.exe.readmeファイルをインストールに追加しますインストールディレクトリに期待していません:)

+0

これは...興味深いことにDEPの説明が混乱しています。いいえ、DEPは実際にディスク上の実行可能ファイルにリソースフォークから来て、実行可能ではないと魔法のようにタグ付けすることはありません。そして、いいえ、DEPは何かを "検出"しようとはしません。代わりに、メモリページを実行可能または実行不能としてタグ付けするメカニズムです。 –

関連する問題