3

私は Visual Studio 2012 でプログラムを作成してきましたが、アプリケーションを誰かに送信すると、VS2012 ランタイムが必要になり、ダウンロード先や必要なものがわからない場合があります (通常のユーザーの場合)。 「xxx.dll がありません」というのは誤解を招きます)。

アプリケーションに必要な依存関係 (fantom.dll [Lego Mindstorms stuff] と VC++ 2012 Redist) を正確に把握しています。

アプリケーションの起動時にこれらのライブラリが見つからない場合にダイアログを表示し、ユーザーにこれらのライブラリのダウンロード リンクを提供したいと考えています。

これを達成することは可能ですか?

4

4 に答える 4

1

VS2012 ランタイムを動的にテストすることについて話すことはできませんが、fantom.dll を動的に検証することはできます。DLL に直接静的リンクする代わりに、動的に読み込むことができます。実行時に DLL を遅延ロードするようにプロジェクトを構成し、遅延ロードが失敗した場合に RTL が呼び出す遅延ロード コールバック ハンドラを提供できます。LoadLibrary()または、単純に遅延ロード機能をスキップして、DLLをGetProcAddress()直接呼び出して手動でロードすることもできます。

于 2013-05-16T19:34:13.727 に答える
1

いいえ、できませんが、プログラムのインストーラーを作成することはできます。コードの実行前に、プログラムの読み込み中にエラーがスローされます...

あなたはそれで試すことができます: http://www.codeproject.com/Articles/24187/Creating-an-Installer

于 2013-05-16T14:51:13.730 に答える
1

ええ、あなたは次のようなことができます:

  1. バイナリ内のすべてのコードを DLL に移動します。
  2. LoadLibrary を使用して DLL を動的にロードし、FreeLibrary でアンロードする EXE を作成します。
  3. LoadLibrary が失敗した場合は、DLL の欠落が原因かどうかを確認し、欠落している場合は MessageBox/カスタム メッセージを表示して終了します。

もちろん、これは EXE プロジェクトがランタイム自体に依存してはならないことを意味します。3 つの win32 API を呼び出すだけでよいため、これは問題にはなりません。

于 2013-05-17T08:22:51.960 に答える
0

確かに、展開されたシステムに依存関係が存在するかどうかを確認できます。いくつか思い当たります...

  • を呼び出して、実行中のシステムでアセンブリが認識されているかどうかを確認できます AppDomain.AssemblyResolve()ここでさらに読む

  • 別のより原始的なオプションはテストを呼び出すFile.Exists(your assembly path here)ことですが、ハードパスのインストール場所を要求するのは悪い習慣であるため、これはお勧めしません。

とはいえ、他の人が述べているように、インストールディストリビューションを自分で作成することは、依然として最良のアプローチです.

于 2013-05-16T18:01:26.777 に答える