0

私が話しているアプリケーションは、vb6 (80%) と c#、.Net Framework 4.0 (20%) で構成されています。新しいコンポーネントはすべて c# で作成されます。Microsoft Interop Forms Toolkit 2.1 を使用して、後で vb6 に埋め込む COM UserControls を作成します。フォームの場合、通常のクラスを使用して vb6 (COM 可視プロジェクト) で作成して開きます。セットアップを作成するには、賢明に使用します。

ローカルではすべて正常に動作します - 問題は、賢明に作成されたセットアップを使用して開発者以外のマシンにアプリケーションをインストールした場合にのみ発生します。

ac# Form を開くクラスを既存の相互運用ツールキット プロジェクトに追加しました。開発者のマシンでも問題なく動作し、PC (非開発マシン) に新しいインストールを行う場合も同様です。新しいクラスは、フォームを開くために使用されます。

しかし、アプリケーションを新しいバージョンに更新すると、そのクラスは機能しなくなります。古いバージョンをアンインストールし、新しいバージョンをインストールして再び機能させる必要があります。

誰かが以前に同様の問題を抱えていましたか?

アドバイスをいただければ幸いです

4

1 に答える 1

1

これは、Windows インストーラーとアップグレード中のシーケンスに問題があるようです。アプリケーションはサイド バイ サイド インストールを許可していますか (たとえば、バージョン 1 とバージョン 2 を同時にインストールできますか)、またはインストーラーは以前のバージョンを最新バージョンにアップグレードしますか? インストールをログに記録し、ログ ファイルを確認して、インストール/アップグレード プロセス中に何が起こっているかを正確に確認してみてください。

コマンド ラインから Msiexec を呼び出すことにより、msi インストールをログに記録できます。

これにより、より深い洞察が得られ、問題のデバッグに集中することができます。

編集

あなたが説明したことから、新規インストールではインストールが期待どおりに機能するようです。以前のバージョンをアップグレードすると、COM Interop コンポーネントが正しく登録されていないように見えます。これは、コンポーネントがマシンにコピーされて登録されるタイミングと、既存の製品が削除されるタイミングに関して、イベントのシーケンスが少しずれていることを示している可能性があります。完全に同一ではありませんが、詳細については、このSO の質問と回答を参照してください。また、詳細については、Windows インストーラーのRemoveExistingProductsアクションを参照してください。

問題なく動作することがわかっているインストール (「クリーン」マシンなど) をログに記録し、失敗することがわかっているインストール (アップグレードなど) をログに記録し、ツールを使用して 2 つのログ ファイルを比較して、出力が同一です。そうでない場合は、どこを見ればよいかの手がかりが得られます。それらが同一である場合は、ベンダーと協力して、問題の原因を特定するのに役立つかどうかを確認する時期かもしれません.

于 2012-06-15T16:05:39.010 に答える