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 не указана?
Ответы
Ответ 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
так же, как сейчас.