MSIのアンインストール部分を交換する方法
-
14-10-2019 - |
質問
VS2010セットアッププロジェクトを使用してMSIインストーラーを構築しました。
これで、「1001例外:引数MachinEnameの無効な形式」(以下を参照)のためにプロジェクトが削除されません。
システムコントロールから削除を使用してアプリケーションをアンインストールすることに失敗しましたまたは msiexec /uninstall
.
アンインストールを強制する方法はありますか?
詳細:
カスタムアクションの一環として、アプリがWindowsログにログインするためにアプリが使用するカスタムイベントソースを登録します。
public override void Install(IDictionary stateSaver) {
base.Install(stateSaver);
EventLog.CreateEventSource("VeodinRecorder","Application");
}
「アンインストール」の内部では、このイベントを削除しようとします
if (!EventLog.SourceExists("VeodinRecorder"))
EventLog.Delete("VeodinRecorder"); `
Eventlog.deleteはMachineNameを2番目の引数として受け取るので、アンインストールに使用されるMSIを上書きしようとしました msiexec /fv
アンインストールアクションを変更しました。
EventLog.Delete("VeodinRecorder",".");
EventLog.Delete("VeodinRecorder","Application");
「アンインストールアクション」全体を空白にしました。
しかし、何もうまくいかなかったようです。
ヒントはありますか?
完全なログ:
エラー1001.エラー1001.アンインストール中に例外が発生しました。この例外は無視され、アンインストールは続きます。ただし、アンインストールが完了した後、アプリケーションが完全にアンインストールされない場合があります。 - >引数MachinEnameの無効な形式。 msi(s)(60!68)[22:49:00:101]:
デバッグ:エラー2769:カスタムアクション_3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.UNINSTALLは1 MSIHandlesを閉じませんでした。
インストーラーは、このパッケージをインストールする予期しないエラーに遭遇しました。これは、このパッケージの問題を示している可能性があります。エラーコードは2769です。引数は_3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.UNINSTALL、1、CUSTACTALTION _3C1D0358_8969_4B01_B8FA_BB6B443F4E9E4C.UNINSTLINESTALL INPRATED INININSTLEED ining
アクションは22:49:00で終了しました:InstallexeCute。返品値3。
アクションが終了した22:49:00:インストール。返品値3。
解決
customaction.dllは、インストールを更新したときに更新されなかったようです msiexec /fv
.
今では、新しくBuild Customaction.dll(空のアンインストールオーバーライドを使用して)をインストールフォルダーに手動で配置し、アンインストールすることができました。
アップデート: (@pcansのクレジット)ORCAを使用して、現在インストールされているMSIを編集し、アンインストールカスタムアクションを手動で無効にします。
他のヒント
ただ 参考のために あなたもできることを追加したいです インストールされた製品にパッチを当てます とともに マイナーアップグレード 呼び出される前に、アンインストールシーケンスで故障したアクションを削除します。これは、マイナーアップグレードが同じ製品の再インストールであり、アンインストールや新しいバージョンの再インストールではないためです(これは主要なアップグレードです)。したがって、アンインストールシーケンスを正しいシーケンスに置き換えて、誤ったシーケンスが実行される前になります。
ただし、WiseやInstallShieldなどのプロフェッショナルなツールを使用しても、パッチの作成は非常に複雑ですが、特定の場合、これはパッケージを適切にアンインストールするために機能する唯一の修正です。会社の「野生の」パッケージをこのように修正する必要があります。
最後に使用できます msizap.exe MicrosoftからUnregisterを登録することは、Windowsインストーラーデータベースからの障害のあるパッケージ全体を登録しますが、システムの変更がまったく巻かれず、多くのジャンクがどこにでも残っているため、これは良くありません。また、ツール自体は時々少し不安定に見え、時には修正が本当に難しい新しいエラーを作成することがあります。できればそれを使用します デバッグのみ.
すでに長い返信でさらに1つのメモ: 特別なケース アンインストールシーケンス中にのみカスタムアクションを実行し、故障した返品コードを返す場合です。これらのアクションは非常に承認を引き起こす可能性があります」ロールバックのみの状況のみをアンインストールします「。事実上、アンインストールがインストール中に実行されなかったカスタムアクションにヒットするとロールバックされます。これにより、アンインストールがロールバックされ、インストールとして機能します - 製品はマシンに残されています。非常に奇妙です。
結論: :アンインストール中に実行されるカスタムアクションのリターンコードをスキップし、他の検証メカニズムを使用してアクションが成功したことを確認します。