VS2005 を使用して C# で記述された Windows サービスがあります。
インストールは、msiexec を呼び出して、同じく VS2005 を使用して作成された msi ファイルをインストールするウィザードを介して行われます。
サービスのあるバージョンから別のバージョンにアップグレードする msi ファイルの生成に問題があります。ウィザード プログラムは、現在インストールされているバージョンの検出、サービスの停止、msiexec の適切なコマンド ラインの作成、およびサービスの再起動を処理します。
既存の msi のバージョン プロパティは 1.1.02 で、新しいものは 1.1.03 です。製品コードとアップグレード コードは同一です。
「クリーンな」システムに 1.1.03 をインストールする場合と同様に、プログラムの追加と削除を介して 1.1.02 を手動でアンインストールすると問題なく動作します。
1.1.02 から 1.1.03 へのアップグレードは一連の流れですが、最終的には 1.1.02 がインストールされます。
ウィザードがアップグレードに使用するコマンド ラインは次のとおりです。
msiexec /qb /i "MyProduct.msi" REINSTALL="ALL" REINSTALLMODE="vos"
どこが間違っていますか?かなり基本的なことを見逃しているに違いないと思います...
フォールバックの立場は、ウィザードを実行して 1.1.03 をインストールする前に手動で 1.1.02 をアンインストールする必要があることを顧客に通知することですが、私はむしろそれを行う必要はありません。
追加するために編集:
製品コードを変更すると (VS2005 にもプロンプトが表示されるため)、実際にはアップグレードする機能がまったく削除されます。その製品コードが以前にインストールされていない場合、インストーラーは再インストールを許可しないためです。
あとはインストールするだけです (その後、通常の「サービスは既に存在します」というメッセージが表示されます)。