Closed sergey-s-betke closed 7 years ago
Для этих целей требуется, как минимум, MSI 5.0. Ну почему бы и нет. Поддерживается с Windows 7 и старше.
ProgramFiles
в подпапках x86
и x64
. Для того, чтобы при установке per user различать файлы x86 и x64. Эту задачу необходимо решить в ITG.WixUtils.Сейчас вижу минимум две проблемы с директориями:
AdminToolsFolder
. Недопустима. И совершенно неясно, зачем она включена в дистрибутив. Необходимо проверить ITG.WixUtils.TempFolder
. Она так же недопустима. Я её использую для перенаправления "отключаемых" ярлыков. Видимо, придётся искать иное решение. Или вообще отказаться от этой возможности. Вероятнее всего, придётся отказаться. В конце концов, удалить лишние ярлыки вполне можно трансформацией.AdminToolsFolder
- проблема не в ITG.WixUtils. У нас csmadmin
устанавливает ярлык в указанную папку. Придётся ярлык переместить.Для этих целей придётся использовать WixUI_Advanced
, возможно - с переработкой (потому как указанный интерфейс подразумевает лицензию, которой во многих продуктах на первых сборках может не быть).
Ещё одна проблема - UninstallOriginalPackage
. Данная операция требует повышенных прав. Эти действия стоит выполнять только при установке на машину, а не на пользователя.
MsiRunningElevated
Однако, осталась проблема при выборе из интерфейса варианта установки на пользователя - требует UAC, и ставит, в итоге, под администратора. Будем искать проблему...
Как и ожидалось, WixUI_Advanced
не готов к MSI 5.0 в части dual purpose package. Придётся переписывать. Чужой опыт: http://www.egoroff.spb.ru/blog/62003.html
Однако, осталась одна проблема:
Возможно, MSIINSTALLPERUSER
не сохраняется в пакете. Либо же его следует как-то устанавливать...
Дело было в MSIDEPLOYMENTCOMPLIANT
. Его установки вынуждает MSI выдавать UAC, но почему только при удалении и обслуживании? Итого - сейчас проблема решена. Для установки на пользователя UAC не возникает.
Хорошо бы добавить тесты...
Следует разобраться с APPLICATIONFOLDER
в ITG.WixUtils. Всё-таки, всё, что связано с этой переменной, следует определять в ITG.WixUtils. А это:
ApplicationFolderName
(фрагмент должен быть зависимостью). Кстати - необходимо учесть x86/x64 в в формировании значения по умолчанию. Или научиться определять значение динамически через Custom Action)WIXUI_INSTALLDIR
(уже APPLICATIONFOLDER
должна быть зависимостью).PRIMARYFOLDER
?
https://msdn.microsoft.com/en-us/library/windows/desktop/dd408068(v=vs.85).aspx