1

私が作成した C# アプリケーションで、そのメイン DLL の 1 つの自動更新を実行する必要があります。アイデアは、.exe が起動すると、まずインターネットで更新プログラムをチェックし、次にその更新プログラムをダウンロードするというものです。

ダウンロードが完了したら、DLL を実行する前に署名チェックを実行する予定です。

私は .NET アセンブリ署名の仕組みに慣れていません。特に、バージョン管理されたアセンブリ (バージョン 1.0 からバージョン 1.1 への移行) に関してはそうです。

.NET は私を助けることができる何かを提供していますか? 厳密な名前付けの制約内で正しく作業するにはどうすればよいですか? (できますか?)

APIや仕組みよりも、この質問のガイダンスとテクニックを期待しています

4

1 に答える 1

1

その仕事をするために別のプロセス(例えばupdate.exe)が必要かもしれないと私は感じています。

理由:プロセスが実行されていて(たとえばMyApp.exe)、X.dll(ロードされたモジュール)を使用している場合、例外がスローされるため、X.dllを更新(置換)できません。

System.IO.IOException:別のプロセスによって使用されているため、プロセスはファイル'X.dll'にアクセスできません。

したがって、X.dllモジュールをロードする前に、この更新/置換を行う必要がある場合があります。ロードアセンブリを制御する必要がある場合は、ReflectionsAssembly.Loadを使用する必要があります。それでよければ。

使用できるdllのバージョン番号を取得するには、次のようにします。

Assembly assembly = Assembly.LoadFrom("X.dll");
Version ver = assembly.GetName().Version;

アセンブリに署名するには、signtool.exeなどの外部ツールを使用できます。これはWindowsSDKの一部であり、コマンドライン引数を取ります。詳細については、こちらをご覧ください。

于 2013-03-16T06:20:46.573 に答える