Wix: запись файла в настраиваемом действии

У меня проблема с wix и управляемыми настраиваемыми действиями: в своем настраиваемом действии я создаю файл и сохраняю его по пути INSTALLLOCATION. Кажется, что это работает, не исключение не выбрасывается. Но после установки, только что созданный файл не существует в INSTALLLOCATION.

WiX-файл:

<CustomAction Id="SetInstallPath" Property="CreateTimeStamp" Value="[INSTALLLOCATION]"
   Execute="immediate"/>
<CustomAction Id="CreateTimeStamp" BinaryKey="SetupActions.dll"  
   DllEntry="CreateTimeStampFile" Execute="deferred" Return="check"/>
<InstallExecuteSequence>
  <Custom Action="SetInstallPath" Before="InstallFinalize"/>
  <Custom Action="CreateTimeStamp" Before="InstallFinalize"/>
</InstallExecuteSequence>

Пользовательские-Action-Methode:

...
var keys = new string[session.CustomActionData.Keys.Count];
session.CustomActionData.Keys.CopyTo(keys, 0);
var cad = keys[0];
var filepath = cad + "myfile.xml";
File.Create(filepath);
...

Есть идеи?

Отредактировано: после сообщения от Скотта Беттжера y отредактировал содержимое файла wix.

2 ответа

Решение

Я не думаю, что ваша конфигурация правильная. Вот некоторые из проблем:

  1. Вы не должны использовать частные свойства в InstallExecuteSequence (CREATE_TIME_STAMP лучше, чем CreateTimeStamp, потому что это открытое свойство).
  2. Вы устанавливаете свойство CreateTimeStamp и читаете CustomActionData внутри своего настраиваемого действия. Необходимо установить для свойства CustomActionData путь INSTALLLOCATION.
  3. Так как пользовательское действие создает файл в папке установки, оно должно запускаться как отложенное, а для атрибута Impersonate должно быть установлено значение "no". Таким образом, у него будет достаточно прав для создания файла.

Попробуйте внести эти изменения и посмотреть, если проблема не устранена.

Я считаю, что ваши пользовательские действия должны находиться между InstallInitialize и InstallFinalize. Попробуй это:

<InstallExecuteSequence>
  <Custom Action="SetInstallPath" After="InstallInitialize"/>
  <Custom Action="CreateTimeStamp" Before="InstallFinalize"/>
</InstallExecuteSequence>
Другие вопросы по тегам