web-dev-qa-db-ja.com

exe + dllを1つの実行可能ファイルにパックする(.NETではない)

可能性のある複製:
C++ windows dllをC#アプリケーションexeにマージするにはどうすればよいですか?

複数のDLLと.EXEを1つの実行可能ファイルにパックできるプログラムを知っている人はいますか?ここでは.NETのケースについて話していません。C++で生成する一般的なDLLについて話しているものもあれば、外部のものもありますDLL私は制御できません。

私の特定のケースは、py2exeでパッケージ化されたpythonプログラムで、他のDLLをパックして「非表示」にしたい場合です。質問は十分に一般的です。

見ていたこと:

ほとんどわかった。実行可能ファイルと何でも1つのexeにパックできますが、開くと、パックされたすべてのファイルに対してデフォルトのオープナーが起動します。したがって、ユーザーユーザーdlldependがインストールされている場合は、それが起動されます(これがデフォルトのdllオープナーであるため)。

多分それは不可能ですか?


回答の要約:

DLLのオープンはOSによって管理されるため、DLLを実行可能ファイルにパックすることは、ある時点で、OSが検出できる場所にそれらを抽出する必要があることを意味します。魔法の弾丸はありません。

だから、私が望むことは不可能です。

でなければ...

OSで何かを変更します。アプリケーションとOSのロードメカニズムを仮想化する ThinInstall を教えてくれたConradに感謝します。 ThinInstallを使用すると、すべてを1つのexe(DLL、レジストリ設定など)にパックできます。

31
Philippe F

見て ThinstallThinApp

5
Rad

BoxedApp をご覧ください。幸運を!

6
Art

実行可能ファイルがDLLに静的にリンクしている場合、つまりLoadLibraryへの呼び出しがない場合、DLLを実行可能ファイルにパックするメカニズムはないと思います。 DLLロードは、「main」関数が呼び出される前にOSアプリケーションローダーによって実行されます。私が認識している限り、これを回避する唯一の方法は、exeとdllを別のDLLに置くことです。 exe。このラッパーexeは、実際のexeとdllを一時フォルダーに解凍し、exeを開始して、exeが終了するとファイルを削除します。

LoadLibrary/Exを呼び出してdllをロードする場合は、LoadLibrary/Exを呼び出す前に、exeリソースからファイルにdllを抽出します。

本当の問題は、LoadLibrary関数がライブラリのロード時にアドレスの多くの修正を行い、ファイルからロードする場合にのみ機能することです。

4
Skizz

Powerpacker を試してください。 Evalaze は、もう1つの無料の仮想化ソリューションです。 エニグマバーチャルボックス フリーウェア版

4
Kachwahed

DLLをバイナリリソースとしてEXEに追加できます。起動時に、EXEはリソースを一時フォルダーに抽出し、結果のDLLをLoadLibrary()できます。

1
Arnout

Valgrid、thinstall、boxedappのいずれかを使用できます。

1
John Smith

私の安いユーティリティのリストを見ましたか?

以下のように、非ネットアプリのDLLをリンクするいくつかの安価な(つまり、かなり安価な)ツールがあるはずです。

1.)Molebox Pro(eu 100)2.)BitArt's Fusion($ 160)3.)VBラップ($ 100)4.)PEバンドル($ 30)

さらに、「www.oreans.com」では、eu 320用の保護指向のプログラムバンドルが見つかるかもしれません。これは、彼らが主張するように、Win32ファイルまたは「.Net」ファイルのいずれかをリンクできます。ただし、「。Net」EXEをパックするために「XBundler For Win32/.NET」を使用して、Windos 98(フレームワークなし)で実行しようとする特定のシナリオを尋ねたところ、 、彼らはそれがうまくいかないと言いました。 :-(

EXE崇拝者

1
EXE Admirer

共有オブジェクトに別の共有オブジェクトへのリンクを要求して、Linuxでそれらを1つに結合することは可能だと言われました

しかし、それはWindowsネイティブdllでは機能しません。1つ目に発生するのは、元々属しているプロジェクトに関係なく、リンカーを使用してすべてのobjをリンクできることです。もちろん、同様のリンクオプションが必要です。

0
Baiyan Huang