0

これはとても些細なことのようですが、私はそれを機能させることができません。

署名する必要のあるmsi.dllラッパー(Interop.WindowsInstaller.dllという名前)があります。これを行う方法は、インポート時に署名することです(この特定のケースは、MSDN:http://msdn.microsoft.com/en-us/library/zec56a0w.aspxにも記載されています

しかし、どのように実行しても(w/またはw/ oaキーファイル、w/またはw/o「/delaysign」の追加なし)、生成されるアセンブリのサイズは常に36,864バイトであり、DLLのプロパティを表示するときに「デジタル署名」はありません "タブ(言うまでもなく、DLLは署名されていません)。

私はここで何が欠けていますか?(... ヘルプ!...)

4

1 に答える 1

0

[注:最終的に、このスレッドでKarel Zikmundからヒントを得ました。これは、謎を解くのに役立ちました。ここに返信を貼り付けます-より良いものにするために]。

そこで、次の行を使用して、アセンブリにサインオンインポートしました。

tlbimp C:\ WINDOWS \ system32 \ msi.dll /out:Interop.WindowsInstaller.dll /keyfile:MyKey.snk

次に、ファイルを適切な場所にコピーしてプロジェクトをビルドしましたが、次のエラーでビルドが失敗するたびに、アセンブリの生成に失敗しました-参照されるアセンブリ'Interop.WindowsInstaller'には厳密な名前がありません

問題はtlbimp行にあると思いましたが、Karel Zikmundの応答を読み、DLLに厳密な名前が付けられていることを確認した後(sn -vf Interop.WindowsInstallerを使用)、問題を発見しました。

「MicrosoftWindowsインストーラオブジェクトライブラリ」への参照を追加すると、COMオブジェクトは実際にコードブロックを.csprojファイルに配置しました。気づかなかったのですが、このブロックにより、プロジェクトがビルドされるたびにDLLファイルが最初から再生成されました。もちろん、生成されたファイルには、もはや厳密な名前は付けられていません。

私が解決した方法は、プロジェクトから「Microsoft Windowsインストーラオブジェクトライブラリ」への参照を削除し、インポートされた(そしてすでに署名された)Interop.WindowsInstaller.dllファイルへの直接フ​​ァイル参照を追加することでした。

于 2010-04-22T17:28:00.507 に答える