0

Installshield 2011 を使用してインストーラーを開発しています。プロジェクトの種類は基本の MSI です。アンインストール中に実行する必要がある方法で順序付けされたカスタム アクションがあります。これは、私が構成したカスタム アクション プロパティの添付スナップ ショットです。

アンインストール用に添付されたカスタム アクションのスナップショット

私が直面している問題は、構成されたカスタム アクションがアンインストール中に実行されず、最終的にインストールされたアプリケーションが削除されないことです。

詳細ログからのエントリは次のとおりです。

00532: (Unknown): InstallShield 11:01:17: Registering Msi Server...

00533: (Unknown): InstallShield 11:01:17: **Invoking script function MyFunction**

00534: (Unknown): InstallShield 11:01:17: **CallScriptFunctionFromMsiCA() ends**

00535: (Unknown): CustomAction NewCustomAction1 returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

00536: (Unknown): Action ended 11:01:17: **NewCustomAction1. Return value 3.**

00537: (Unknown): Action ended 11:01:17: **INSTALL. Return value 3.**

00538: (Property): Property(S): DiskPrompt = [1]

00539: (Property): Property(S): UpgradeCode = {40AD9645-1459-4C32-8285-D1C0B163361D}

00540: (Property): Property(S): ProductCode = {84BDE810-2C23-48CA-A638-5B131DA3B57F}

ここで何か不足していますか?

4

1 に答える 1

2

私の最初の質問は、なぜカスタム アクションを作成するのかということです。InstallShield の組み込みのカスタム アクション ( XML ファイルの変更 ) には、アンインストール時に要素を削除する機能が既に備わっています。私の 2 番目の観察は、InstallScript は言語として堅実であり、問​​題を引き起こす傾向があるカスタム アクションを適切に設計する方法についての理解が不足していることです。私は読みます:

Windows インストーラーでのカスタム アクションのインストール フェーズとスクリプト内実行オプション

システムを変更するすべてのカスタム アクションは、InstallInitialize と InstallFinalize の間のシステム コンテキストで Deferred としてスケジュールしてください。また、必ず CustomActionData パターンを使用し、アンインストールがキャンセルまたは失敗した場合に対応するロールバック アクションを用意してください。そうしないと、アプリケーションがインストールされているのにタグが見つからないという状況に陥る可能性があります。

そしてもちろん、車輪がすでに存在する場所で車輪を再発明することは決してありません。(XMLFileChanges) めったにうまくいきません。

于 2013-04-01T13:49:53.813 に答える