1

即時段階でファイルの場所をプロパティに保存するカスタム アクションがあります。次に、deffered フェーズで別のアクションを実行します。これは、このプロパティを読み取り、ファイルを作成します。

String configFilePath = session.CustomActionData["configPath"];
String configFileName = session.CustomActionData["configFile"];
...

これまでのところすべてが機能します。アンインストール時にこのファイルを削除したいので、ファイルを削除した後に実行する別の遅延アクションがあります。アクションは機能します。問題は、プロパティが空であることです (session.CustomActionData が空です)。なんで?アンインストールが発生している場合も、即時フェーズに設定しました。また、カスタム setUpConfig アクションで読み取れる場合、カスタム removeConfig アクションで読み取れないのはなぜですか? 1つのオプションは、インストール段階でこの値をレジストリに保存し、アンインストール時にそこから読み取ることだと思います。しかし、プログラムのインストール時にプロパティを設定できる理由と、アンインストール時に設定されない理由を知りたいです。どちらの場合でも、プロパティを設定するアクションが実行されます。

<CustomAction Id="ConfigFileLocation" Property="setUpConfig" Execute="immediate" 
Value="configPath=[WEBSITE];configFile=config_template.asp" />

<CustomAction Id="setUpConfig" BinaryKey="MyCustomAction" DllEntry="configFile"  
Execute="deferred" Impersonate="no"  Return="check" />

<CustomAction Id="removeConfig" BinaryKey="MyCustomAction"  
DllEntry="removeCustomFile"  Execute="deferred" Impersonate="no"  Return="check" />

<InstallExecuteSequence>
<Custom Action="ConfigFileLocation" After="LaunchConditions" />
<Custom Action="setUpConfig" Before="InstallFinalize"><![CDATA[NOT REMOVE="ALL"]] />
<Custom Action="removeConfig" After="RemoveFiles"><![CDATA[REMOVE="ALL"]] />
</InstallExecuteSequence>
4

1 に答える 1

1

遅延カスタム アクションにデータを渡すには、Propertyに一致する名前で を設定する必要がありますCustomAction/@IdsetUpConfig即時カスタム アクションを介して、カスタム アクションに対して正しく実行していConfigFileLocationます。

ただし、カスタム アクションには、名前付きremoveConfigを設定する即時カスタム アクションはありません。PropertyremoveConfig

したがって、removeConfigカスタム アクションのCustomActionDataプロパティは空白です。

于 2013-03-21T14:15:49.787 に答える