Подтвердить что ты не робот

Wix - установка установочной папки правильно

Я создаю программу, которая устанавливается Wix, используя VS 2010, и у меня уже есть product.wxs.

В моем wxs файле у меня есть определения каталогов, которые выглядят следующим образом:

<SetDirectory Id="INSTALLFOLDER" Value="[WindowsVolume]Myapp" />
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="INSTALLFOLDER" Name="Myapp">
    <Directory Id="Myapp_Installer_Dir" Name="Myapp">
          <Directory Id="BIN" Name="Bin" />
          <Directory Id="ICONS" Name="Icons" />
    </Directory>
  </Directory>
</Directory>

И затем я получил следующие определения установки файла:

<DirectoryRef Id="Myapp_Installer_Dir">
  <Component Id="INSTALLER_Myapp" Guid="{94F18477-8562-4004-BC6F-5629CC19E4CB}" >
    <File Source="$(var.Myapp.TargetPath)" KeyPath="yes"/>
  </Component>
</DirectoryRef>

<DirectoryRef Id="BIN">
  <Component Id="INSTALLER_Data" Guid="{545FB5DD-8A52-44D7-898E-7316E70A93F5}" >
    <File Source="$(var.Data.TargetPath)" KeyPath="yes"/>
  </Component>
    ...

И он продолжается таким образом, и файлы для каталога "ICONS" также определены.

Я также использую диалоговое окно WixUI_InstallDir, и я также получил эти строки:

<Property Id="WIXUI_INSTALLDIR" Value="Myapp_Installer_Dir" />
<UIRef Id="WixUI_InstallDir" />

Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь устанавливает программу и изменяет значение папки установки, файлы "Bin" и "Icons" устанавливаются в их правильное расположение, но установлен целевой объект Myapp к месту фиксации, которое было определено в начале.

Почему только файлы bin и значков установлены в нужную папку, которую хотел пользователь, но цель myapp не указана?

4b9b3361

Ответ 1

Я, наконец, понял проблему. После некоторого поиска я наткнулся на этот документ:

Диалоговое окно WixUI_InstallDir

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

И как вы можете видеть в моем коде: "Myapp_Installer_Dir" не соответствует этим критериям.

После изменения его в "MYAPPINSTALLERDIR" все сработало.

Ответ 2

Я не совсем уверен, но это то, что, как я думаю, произошло.

Когда вы создаете элемент SetDirectory, вы в основном добавляете настраиваемое действие, которое устанавливает каталог в базу данных MSI. Пока вы не укажете последовательность, в которой она выполнена, по умолчанию она равна both, что означает выполнение как в InstallUISequence, так и InstallExecuteSequence.

Теперь, когда пользователь меняет каталог установки в мастере, это происходит в последовательности пользовательского интерфейса. Очевидно, что когда установка входит в последовательность выполнения, значение INSTALLFOLDER устанавливается на [WindowsVolume]Myapp, как было указано.

Итак, вы должны как-то переделать это. Имейте в виду и тихую установку, там только выполняйте последовательность.

UPDATE вместо того, что у вас есть, попробуйте что-то вроде этого:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="WindowsVolume">
    <Directory Id="INSTALLFOLDER" Name="Myapp">
      <Directory Id="BIN" Name="Bin" />
      <Directory Id="ICONS" Name="Icons" />
    </Directory>
  </Directory>
</Directory>

И позвольте пользователю дополнительно изменить INSTALLFOLDER так же, как сейчас.