即時段階でファイルの場所をプロパティに保存するカスタム アクションがあります。次に、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>