1

私はしばらくこれにこだわっています。最も簡単な言葉で、私の知る限りで説明しようと思います。私はどんな助けも尊重します。

常に更新している VB6 でコンパイルされた ActiveX DLL を使用する C# プロジェクトがあります。セットアップ プロジェクトをコンパイルしてクライアントに送信すると、セットアップが実行されます。更新されたセットアップ プロジェクトをビルドするときに、セットアップ プロジェクトの「バージョン」を増やして、「別のバージョンが既にインストールされている」という問題が発生しないようにします。

いくつかの更新の後、インストーラーで DLL が新しいバージョンに更新されないことに気付き始めました。クライアント コンピュータには、元の DLL がインストールおよび登録されていました。最初の症状: メソッドがクライアント C# コードからの例外を検出しませんでした。

これは共有 DLL ではなく、このアプリケーションだけが必要とします。

アプリケーションを (通常の手順で) アンインストールすると、DLL もアプリケーション フォルダから削除されないことに気付きましたが、このファイルのプロパティ 'Permanent' を false に設定します。レジストリの登録エントリも維持されます。

ビルドする前に、VS6.0 で DLL のバージョンを更新します (通常はビルド番号を増やします)。次に、VS2008 で参照から削除し、開発マシンに再登録して COM タブから追加せずに、[参照] タブから再度追加します。

これらの選択肢を考えました。

  • アンインストール時の regsvr32.exe /u 'ハードコードされた dll のパス' へのセットアップ プロジェクトのカスタム ステップ (醜い)
  • どういうわけか、登録せずに「Isolate」プロパティがどのように機能するかを見つけてください
  • 実際にライブラリのバージョンをチェックし、インストールごとにそれに応じてファイルを更新するセットアップ プロジェクト 'Conditions' を実行する方法を確認してください)。

どんな助けでも大歓迎です。

4

1 に答える 1

0

好奇心から?WiXを使ってみませんか? http://wixtoolset.org/

インストーラーの構築に最適で、次のように簡単に実行できます。

<File Id="guifreak3" Name="Guifreaks.NavigationBar.XmlSerializers.dll" Source="$(var.Plex.MobileHub.Client.Interface.TargetDir)Guifreaks.NavigationBar.XmlSerializers.dll"/>

Wix は、アンインストール時に dll を自動的に削除します。

于 2014-05-29T17:52:49.260 に答える