Корневой каталог установщика WIX и управление версиями - PullRequest
1 голос
/ 22 февраля 2012

Я создал установщик без вывода сообщений, используя WIX для моего приложения. Я хочу установить приложение в папку C: \ MyApps , но его Directory Id = 'TARGETDIR' Name = 'SourceDir' тег случайным образом выбирает C или D привод. Я хочу принудительно установить мою установку только на диск C. Также в случае, если я предоставляю номер версии больше, чем 4.0.5, я получаю сообщение об ошибке во время установки, говорящее: «Этот установочный пакет не может быть установлен службой установщика Windows. Необходимо установить более новую версию службы установщика окон». У меня установлена ​​профессиональная версия Windows XP SP3 2002.

Ответы [ 4 ]

4 голосов
/ 22 февраля 2012

Для начала, я думаю, вы должны начать свое путешествие по WiX с учебным пособием, доступным здесь . Он содержит ответы на большинство основных вопросов, с которыми вы столкнетесь в первую очередь. Вы также должны знать, что понимание WiX означает сначала понимание концепций установщика Windows - в противном случае некоторые моменты покажутся вам странной магией.

Когда вы создаете новый проект установки WiX в Visual Studio, он генерирует шаблон с некоторыми заполнителями. Рекомендуется начать модифицировать этот шаблон. Например, структура каталогов:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLLOCATION" Name="SetupProject1">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
      <!-- <Component Id="ProductComponent" Guid="ba7d579f-5234-4448-b880-109f589d58e5"> -->
      <!-- TODO: Insert files, registry keys, and other resources here. -->
      <!-- </Component> -->
    </Directory>
  </Directory>
</Directory>

Этот фрагмент определяет папку INSTALLLOCATION в ProgramFileFolder, и это лучший подход, чем помещать ее в корневой каталог C: \. Вы все еще можете изменить место установки, изменив свойство INSTALLLOCATION во время установки (например, основываясь на вводе пользователя).

Быстрый ответ на ваши вопросы:

... случайно выбирает диск C или D ...

Это ожидается - он выбирает диск с наибольшим количеством свободного места к моменту установки. Если вы придерживаетесь того, как шаблон WiX определяет по умолчанию, он попадет в C: (фактически, в папку Program Files).

... Вы должны установить более новую версию службы Windows Installer ...

По сути, это означает, что в нем говорится - версия установщика Windows на вашей машине ниже той, которая требуется в вашем пакете. Если вы попытаетесь решить вышеуказанные проблемы с этим изменением, то это не имеет никакого отношения к версии установщика Windows. Требуется более высокая версия, чем указана по умолчанию, только в случае, если вы собираетесь использовать новые функции установщика Windows.

Надеюсь, вы сделаете правильный вывод из этого краткого вступления - начните с урока. : -)

2 голосов
/ 11 февраля 2014

Попробуйте это:

<Fragment>
    <Property Id="_BrowseProperty" Value="INSTALLDIR" Secure="yes"/>
    <CustomAction Id="SetDataLocationDefault" Property="INSTALLDIR" Value="[WindowsVolume]$(var.Title)\" />
    <InstallUISequence>
      <Custom Action="SetDataLocationDefault" After="CostFinalize" />
    </InstallUISequence>
    <InstallExecuteSequence>
      <Custom Action="SetDataLocationDefault" After="CostFinalize" />
    </InstallExecuteSequence>    
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="INSTALLDIR" Name="$(var.Title)">
     <!-- TODO: Insert your components here. -->
      </Directory>
    </Directory>

  </Fragment>

Я думаю, это должно работать!

2 голосов
/ 23 февраля 2012

Проблема с вашими версиями заключается в том, что вы меняете версию Windows Installer при изменении версии Product .

<Package
    Id='*' 
    InstallerVersion='406'
    Compressed='yes'
    Description="Installer Number 406" />

Атрибут InstallerVersion должен быть минимальной требуемой версией Установщика Windows , необходимой для установки этого пакета. У вас установлен Windows Installer v4.5 . Когда он установлен на 406, он ищет Windows Installer v4.6 , который, честно говоря, не существует. Для этого обычно достаточно 301 (версия 3.1).

    InstallerVersion='301'

Хотя с вашим атрибутом description все в порядке, я бы посчитал следующее более значимым:

    Description="My Product v4.0.6 Installer"
0 голосов
/ 23 февраля 2012

Не полагайтесь на TARGETDIR и используйте пользовательское свойство, например:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="INSTALLLOCATION" Name="SetupProject1">
      <!-- TODO: Insert your components here. -->
  </Directory>
</Directory>

Шаблон взят из Ответ Яна . Установите INSTALLLOCATION в нужную папку C:\MyApps, что должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...