私はWIXスクリプトを書いています。
レジストリテーブルに動的に行を追加するカスタムアクションがあります。
function AddRegistry()
{
var registryView = Session.Database.OpenView("SELECT * FROM Registry");
registryView.Execute();
var record = Session.Installer.CreateRecord(6);
record.StringData(1) = "Unique123456";
record.IntegerData(2) = 2;
record.StringData(3) = "Software";
record.StringData(4) = "my_registry_string";
record.StringData(5) = "value";
record.StringData(6) = "MyComponent";
registryView.Modify(7, record); //InsertTemporary
registryView.Close();
return 1; //Ok
}
カスタムアクションは、「即時」として、「WriteRegistryValues」アクションの前に実行されるようにスケジュールされています。
<CustomAction Id="AddRegistry" BinaryKey="CustomActionJS"
JScriptCall="AddRegistry"
Execute="immediate" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="AddRegistry" Before="WriteRegistryValues" />
<Custom Action="CheckRegistry" After="WriteRegistryValues" />
...
</InstallExecuteSequence>
レジストリテーブルを列挙し、見つかったすべてのエントリ(固定および一時)を表示する2番目のカスタムアクションを追加しました。
ただし、WriteRegistryValuesが実行されているとき(私が理解している限り、延期されています)、固定エントリのみが書き込まれます。動的エントリは無視され、レジストリに追加されません。
同じレジストリパスへの固定レジストリエントリは正常に機能します。
<Component Id="MyComponent">
<RegistryValue Id="Unique11111" Root="HKLM" Key="Software"
Name="my_fixed_value" Value="my_value"
Action="write" Type="string"/>
</Component>
私が間違っていることについて何か考えはありますか?