Wix: Как выполнить поиск по каталогу в пользовательском месте установки - PullRequest
6 голосов
/ 09 сентября 2011

Я хотел бы определить, существует ли каталог в пользовательском месте установки, выбранном пользователем в графическом интерфейсе.Я попробовал следующее:

<Property Id="DIRECTORY_PATH">
  <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" />
</Property>

Но это не работает, потому что поиск каталогов происходит во время поиска приложений.Хотя INSTALLDIR устанавливается позже во время InstallDirDlg.Поскольку INSTALLDIR не установлен во времени для AppSearch, DIRECTORY_PATH неправильно установлен в «\ MyDirectory».

Я пытался изменить, когда AppSearch происходит с InstallUISequence и InstallExecuteSequence, но он только позволит AppSearch прийти до CostInitialize, но не позже.

Так как мне выполнить поиск в каталоге в выбранном пользователем месте INSTALLDIR?

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Если вам нужно только дождаться выбора пользователя, чтобы проверить этот каталог, то DirectorySearch не сделает эту работу за вас.Вам нужно будет создать настраиваемое действие «установить свойство» сразу после того, как пользователь выберет INSTALLDIR, например, при следующем щелчке по InstallDirDlg.

ОБНОВЛЕНИЕ.Итак, я имею в виду в основном следующее:

  • когда пользователь попадает в InstallDirDlg вашей настройки, он / она выбирает каталог, который помещается в свойство INSTALLDIR
  • диалоговое окноЗатем InstallDirDlg должен вызвать настраиваемое действие для кнопки «Далее»
  • . Это настраиваемое действие должно получить значение свойства INSTALLDIR и выполнить простую проверку файловой системы, содержит ли INSTALLDIR MyDirectory
  • , если это так, то DIRECTORY_PATHдля свойства задано необходимое значение, например, session["DIRECTORY_PATH"] = session[INSTALLDIR] + "\MyDirectory";
  • , в противном случае DIRECTORY_PATH не устанавливается (и вы можете использовать этот факт в любом состоянии, установив NOT DIRECTORY_PATH)

Hopeэто проясняет.

0 голосов
/ 12 октября 2012

Надеюсь, это вам поможет.

Если вы сохранили INSTALLDIR предыдущей установки в реестре, вы можете получить его и найти.В последовательности установки интерфейса местоположение установки будет указывать на предыдущее местоположение.

<!-- Set previous install location, if available -->
<Property Id="INSTALLDIR" Secure="yes">
  <RegistrySearch Id="InstallRootRegistry"
                  Type="raw"
                  Root="HKLM"
                  Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
                  Name="INSTALLDIR" />
</Property>

<!-- The property WIXUI_INSTALLDIR must be set for the UI to know which directory to use as default -->
<Property Id="WIXUI_INSTALLDIR"
          Value="INSTALLDIR"  Secure="yes"/>
...