Как изменить ROOTDRIVE с помощью CustomAction? - PullRequest
2 голосов
/ 21 ноября 2011

Обычно вы можете изменить корневой диск по умолчанию, чтобы установить приложение, используя:

<Property Id="ROOTDRIVE">D:\</Property>

Но теперь я хочу изменить его, используя CustomAction, который вызывается при следующем нажатии кнопки в мастере установки:

[CustomAction]
public static ActionResult SetFullInstallRootDrive(Session session) {
    session["ROOTDRIVE"] = session["DRIVE_NAMES"].ToString();
}

DRIVE_NAMES представляет выбранный диск с использованием поля со списком, и ROOTDRIVE правильно устанавливается на любой выбранный локальный диск (например, C:\ или D:\). Однако программа установки всегда устанавливает диск D:\, изначально указанный в приведенном выше свойстве. Что происходит и как я могу изменить значение этого свойства на лету в настраиваемом действии, чтобы позволить пользователю выбрать корневой диск для установки моего веб-приложения? Свойство ДОЛЖНО быть установлено, но оно не использует его, почти как если бы свойство ROOTDRIVE оценивалось только один раз в начале мастера установки.

Ответы [ 2 ]

3 голосов
/ 23 марта 2014

Используя 3.5, я смог настроить MSI, который будет устанавливать на E: если доступно, в противном случае установить на C :.Вместо того, чтобы использовать VBS или пользовательское действие C #, я просто добавляю три строки в WIX.

<Property Id="ROOTDRIVE" Value="C:\">
  <DirectorySearch Id="Root_search" Path="E:\" Depth="1">
</Property>

ROOTDRIVE - это одно из этих специальных, плохо документированных свойств WIX.Как только вы знаете, что он существует, его функция становится очевидной.Устанавливает корневой диск установки.Использование DirectorySearch просто просматривает диск E: и, если доступно, «перезаписывает» начальное значение «C: \».

Вам не нужно изменять порядок установки или создавать пользовательские действия любого вида.

Это довольно просто, и я хотел поделиться им!

2 голосов
/ 21 декабря 2011

Я смог решить свою проблему, изменив TARGETDIR вместо ROOTDRIVE:

<InstallExecuteSequence>
  <Custom Action="FormatTargetDirectory" After="CostFinalize">NOT Installed</Custom> 
</InstallExecuteSequence> 

<CustomAction Directory="TARGETDIR" Value="[DRIVE_NAMES]" Id="FormatTargetDirectory"/>`
...