システムに現在インストールされているバイナリではなく、特定のディレクトリ内の特定のバイナリに対してプログラムを実行することは可能ですか? アプリケーションのソースも変更できません。
3 に答える
最も近い方法は、更新された DLL を .exe と同じディレクトリに配置することです。
以下は、プログラムがロードする DLL を検索する方法の優先順位の一覧です (既知の DLL を除く)。
現在のプロセスの実行可能モジュールが配置されているディレクトリ。
現在のディレクトリ。
Windows システム ディレクトリ。GetSystemDirectory 関数は、このディレクトリのパスを取得します。
Windows ディレクトリ。GetWindowsDirectory 関数は、このディレクトリのパスを取得します。
PATH 環境変数にリストされているディレクトリー。
任意のディレクトリを指定する必要がある場合は、項目 2 が役に立ちます。cd / でターゲット ディレクトリに移動し、フル パスを使用してその場所から .exe を実行できます。または、Windows ショートカットを作成し、「開始:」値を指定して、アプリケーションの現在のディレクトリを設定することもできます。問題の .exe がその作業ディレクトリを変更すると、これは期待どおりに機能しません。
更新:このアドバイスが古くなっていることは明らかですが、「特定のディレクトリ内の特定のバイナリ」の使用に触れる唯一のアドバイスでもあります。これは、ディレクトリではない可能性のある任意のディレクトリを意味すると読みました.exe がインストールされます。また、これが「C#」でタグ付けされていることがわかりました.manifestが利用できるため、私の答えは非常に不十分です。
最も簡単な方法は、LoadLibrary 呼び出しを使用して DLL を動的にロードすることです。そうすれば、使用したい DLL コピーへのフル パスを指定できます。
ネイティブ DLL の場合は、DLL を実行可能ファイルと同じフォルダーに配置するだけです。DLL 検索では、最初にそのフォルダーが検索されます。