Wix Как работают каталоги? - PullRequest
5 голосов
/ 07 июля 2011

Я пытаюсь создать установщик WIX, который позволяет пользователю указать путь установки с помощью аргументов командной строки.

<Property Id="IISROOTPATH">
   <RegistrySearch Id="FindInetPubFolder" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="PathWWWRoot" Type="directory" />
</Property>    
...
<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="IISROOTPATH">
      <Directory Id="INSTALLPATH" Name="WebsiteFolder">
...

Если пользователь не передает никаких аргументов, он ищет реестр для папки iisroot и устанавливает файлы в папку с именем "WebsiteFolder"

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

INSTALLPATH="C:\InetPub\wwwroot\CustomWebsiteFolder"
  1. Как это работает? затем игнорирует другие элементы Справочника TARGETDIR и IISROOTPATH?

  2. Как я могу изменить INSTALLPATH только на WEBSITEFOLDERNAME, чтобы пользователю нужно было только указать имя папки, а не абсолютный путь установки. Таким образом, заставляя пользователя всегда устанавливать в inetpub?

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Вы должны понимать таблицу Directory - концепцию MSI, стоящую за элементом Directory.Лучшее объяснение, которое я когда-либо встречал, это набор статей Роба (ссылка на часть 1, 6 частей, если я правильно помню).

0 голосов
/ 07 июля 2011

Чтобы ответить на ваш второй вопрос:

  1. Создайте пользовательское диалоговое окно (удаление обычного диалогового окна выбора папки), в котором пользователь может ввести желаемую папку, сохраняя свойство (например, [FOLDER_NAME]).
  2. Иметь элемент Directory, который является просто заполнителем для имени папки.
  3. Прикрепите пользовательское действие к кнопке «Далее» в диалоговом окне, созданном в 1., который устанавливает каталог из [FOLDER_NAME].
    <Directory Id="IISROOTPATH">
        <Directory Id="INSTALLPATH" Name="WebsiteFolder">        
        </Directory>
    </Directory>
<CustomAction Id="SetFolderPath" Directory="INSTALLPATH" Value="[IISROOTPATH][FOLDER_NAME]" />

Очевидно, что было бы неплохо добавить условия к кнопке «Далее», чтобы пользователь не использовал значение по умолчанию или оставил имя папки пустым.

Это позволит вам сохранить корневой каталог под именем C: \ Intetpub \ wwwroot и разрешить им указывать пользовательскую папку.

...