0

カスタム インストーラー/アンインストーラーを使用してサービスをインストールする .NET アプリケーションがあります。

これは Windows インストーラーにまとめられているため、インストール時にサービスが登録され、アンインストール時にこのサービスが登録解除されます。ただし、カスタム アンインストーラーが失敗する場合があります。(私の場合、 を呼び出してサービスを手動でアンインストールしましたinstallutil。)

ここで、Windows インストーラー フレームワークを使用して製品をアンインストールしようとすると、次のエラーが表示されます。

エラー 1001。アンインストール中に例外が発生しました。この例外は無視され、アンインストールが続行されます。ただし、アンインストールが完了した後、アプリケーションが完全にアンインストールされない場合があります。→指定されたサービスはインストール済みサービスとして存在しません。

意味あり。THEN を除いて、メッセージの内容にかかわらず、アンインストールはロールバックされます。(この問題については、こちらでも説明しています)。

サービスを手動で再インストールすると、アンインストールが機能する可能性があることはわかっています。

しかし、これをインストール済み製品のリストから強制的に除外できる方法があるかどうかを知りたいです。


これをアンインストールする私の現在のプログラムによる方法は、呼び出すことです

    ::MsiConfigureProduct(productCode.c_str(), INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT);

しかし、これはコントロール パネルからアンインストールするのと同じ効果があり、失敗します。

他にどのようなアプローチを取ることができますか?

4

1 に答える 1

2

これが、Visual Studio 展開プロジェクト、InstallUtil カスタム アクションを使用せず、VM にのみインストールし、自分のボックスにはインストールしないように人々に伝える理由です。

したがって、次のことを行う必要があります。

インストールに使用した MSI を見つけます。Orcaで編集し 、InstallExecuteSequence からカスタム アクションを削除します (または GOTOHELL=666 のような no-op 条件を追加します)。

次のコマンドを実行します。

msiexec /i foo.msi REINSTALL=ALL REINSTALLMODE=vomus

これにより、MSI が「再キャッシュ」されます。[プログラムの追加と削除] を使用してプログラムをアンインストールします。

ここで、実際に ServiceInstall テーブルを公開するより優れたツールに切り替えます。車輪の再発明は、あなたが発見したように終わりはありません。それをお客様に起こさせないでください。

最後に、SC コマンドを使用して、孤立したサービスを停止および削除します。

于 2012-09-06T00:25:08.373 に答える