<uninstallSteps> 要素は <uninstallList> 要素の子要素であり、コンポーネントをアンインストールするために実行される一連のステップを示します。<uninstall> ステップによってこのコンポーネントがアンインストールされる場合、この要素に挙げられるステップが順に実行されます。単純コンポーネントの <uninstallSteps> 要素は <undeployResource> ステップを含むことが許可されますが、これは必須ではありません。複合コンポーネントの <uninstallSteps> 要素には、参照先コンポーネントをアンインストールする 1 つ以上の <uninstall> ステップを含むことが許可されますが、これは必須ではありません。
<uninstallSteps> 要素の子は、オプションの <paramList> 要素から構成され、そのあとに本体が続きます。本体は、オプションの <dependantCleanup> ブロックに続く、オプションのローカル <varList> 要素から構成されます。このブロックの後ろには、ゼロ以上の「共有」または「コンポーネントアンインストールのみ」ステップがあります。アンインストールブロックが抽象と宣言されている場合、本体は含められません。
次の例に、サンプル <uninstallSteps> 要素の内容を示します。</paramList> 以降が本体を定義しています。
<uninstallSteps name="default"> <paramList> <param name="param1"/> </paramList> <varList> <var name="var1" default="my var 1"/> </varList> <dependantCleanup> <uninstall blockName="default"> <allDependants name="child2parent"/> </unisntall> </dependantCleanup> <undeployResource/> </uninstallSteps>
デフォルトでは、派生コンポーネントはそのベースコンポーネントの、アクセス可能なすべてのアンインストールブロックを継承します。アンインストールブロックをオーバーライドするセマンティクスは、インストールブロックをオーバーライドするセマンティクスと同じです。
<uninstallSteps> 要素には次の属性があります。
access – accessEnum 型のオプション属性で、アンインストールブロックのアクセシビリティーを指定します。次の値が使用できます。
PUBLIC – アクセスは制限されません。これがデフォルトです。
PROTECTED– アクセスは同じパス内の派生コンポーネントとエンティティーに制限されます。
PATH – アクセスは同じパス内のエンティティーに制限されます。
PRIVATE – アクセスはこのコンポーネントに制限されます。
コンポーネントから直接実行できるのは PUBLIC ブロックだけです。
modifier – modifierEnum 型のオプション属性で、アンインストールブロックのオーバーライド要件を指定します。次の値が使用できます。
ABSTRACT – ブロックに本体を含めることはできません。 本体は、非抽象派生コンポーネントによって指定する必要があるためです。アンインストールブロックを抽象と宣言できるのは、コンポーネントも抽象と宣言されている場合だけです。抽象ブロックは専用にはできません。非抽象ブロックの場合、本体を宣言する必要があります。
FINAL – アンインストールブロックを派生コンポーネントによってオーバーライドすることはできません。
この属性を指定しない場合、派生コンポーネントはブロックをオーバーライドするかどうかを選択できます。
name – entityName 型の必須属性で、アンインストールブロックの名前。この名前は、包含している <uninstallList> 内のすべてのアンインストールブロックの中で一意である必要があります。
returns – オプション属性で、ブロックが値を返す必要があることを示します。有効な値は true または false です。returns=true が指定された場合、ブロック内の各実行ステップは <return> ステップまたは捕捉されていない <raise> ステップで終わる必要があります。デフォルトは false です。
<dependantCleanup> 要素は <uninstallSteps> 要素の子要素です。<dependantCleanup> 要素は、呼び出し側コンポーネントに現在依存しているコンポーネントを削除するために実行される一連のステップを指定します。この要素に属性はなく、包含するアンインストールブロックのスコープ内で許可される任意の数のステップを含むことができます。
この要素を含めると、依存コンポーネントのチェックはブロックの内容の実行が完了するまで延期されます。ブロックの実行が完了したあとも依存コンポーネントが存在する場合は、アンインストールが失敗し、コンポーネントはインストールされたままとなります。依存コンポーネントが残っていない場合、アンインストールが継続されて残りのステップが行われます。
包含コンポーネントがターゲット設定可能である場合、ブロックを使用して、ホストを対象とする関連付けられたコンポーネントにインストールされたコンポーネントを削除できます。このブロックが完了したあとも、関連付けられているホスト上にインストール済みコンポーネントが残っている場合、アンインストールは失敗します。
アンインストールブロックに <dependantCleanup> ブロックを含めないと、依存コンポーネントが存在する場合、アンインストールブロックはただちに停止します。
<dependantCleanup> ブロックは、依存コンポーネントをまとめてアンインストールする目的で、<allDependants> ターゲッターと併用されることがよくあります。