UAC, тудыть его в качель.

Товарищи, никто не подскажет, где находится очередь желающих оторвать достоинства тому, кто придумал UAC для Vista? Что? Достоинств на всех не хватит? Я предлагаю тогда их пришывать назад и отрывать по второму кругу.

А если серьезно. Никто  случайно не сталкивался с следующей проблемой

— Есть MSI

— Устанавливаем его на машину, выбирая галочку «для всех пользователей»

— Он благополучно устанавливается, по ходу поднимая UAC и прося подтвердить что я таки хочу его поставить (я Admin, поэтому он хоть credentials не просит)

— После того как установилось, щелкаем снова по MSI — он запускается в Maintanance mode (опции modify/repair/remove). Чтобы я не выбирал (modify, repair или remove) он в результате посылает нафиг по тому поводу что у меня нету IE 5.5 или выше (на самом деле есть).

Собственно грабли заключаются в том, что почему-то в этом maintanance mode Vista не выплевывает UAC окошко и не elevate процесс. В результате MSI пытается что-то там делать но Windows бьет его рукам и говорит «не скажу тебе противный, какой у меня IE», ну и MSI естественно передает мне теже слова.

Подтверждением того, что это таки проблемы с elevation, является то, что я насильно (Run as adimistrator) запустил MSI сразу elevated и все зашуршало.

А еще забавность в том, что если я делаю теже самые действия только устанавливаю не для «all user on this computer», а только для себя любимого, то проблемы тоже исчезают и оно таки показывает UAC для maintanance.

Да, кстати, для полноты картины. Мне нужно починить это не с точки зрения пользователя, а именно с точки зрения программиста. То есть, что-то сделать с исходниками (они у меня есть) MSI (здравствуй Wise Installer Studio), чтобы эта фигня зафурычила.

О… и если можно запишите меня в очередь на отрывание достоинств и к MSI’шикам. Хотя нет, пожалуй это перебор… Для них вполне будет достаточно просто мощной затрещины, чтобы в следующий раз делали продукт по проще для понимания.

18 комментариев to “UAC, тудыть его в качель.”

  1. ctype:

    реализовать простую, в принципе, вещь очень сложно могла только большая команда «непрограммистов»
    лично я для себя еще много лет назад решил не пересекаться с msi. пусть уж майкрософтовские с ним бодаются, у них времени и денег много.

    вот уже много лет пользуюсь InnoSetup — очень удачная штука, простая и в то же время с возможностью наворотов

    • Victor Ronin:

      Мне тоже по душе больше InnoSetup, но крупные корпорации предпочитают иметь дело с MSI, так как есть какие-то тонкости, когда его проще устанавливать по всей компании.

  2. ctype:

    а, ну да. с msi — была какая-то мутная тулза консольная, которая распаковывала msi, потом можно было поправить и снова собрать … с ходу не нашел, но когда-то она мне очень помогла чет глючное но нужное поставить … может эта ? http://wix.sourceforge.net/manual-wix2/dark.htm но не уверен

  3. ONE:

    Может попробовать вызвать какую-то custom action, которая потребует уровень admin’а и заставит installer потребовать elevation? Например просто создание пустого sample.txt на C: диске?
    Никогда не пробовал бороться с чистым MSI, но из InstallShield 12 в mixed MSI/InstallScript вроде проблем с этим не было.

    • Victor Ronin:

      Надо попробывать, хотя думаю оно не поможет.
      Насколько я понимаю, UAC требует elevation для процесса, а не для действия.

      То есть, если процесс не elevated и он вызывает какое-то хитрое действие, то это действие просто блокируется.

  4. Аноним:

    Прежде чем ругать Microsoft в целом, и Висту и MSI в частности, почитайте заметку http://www.acresso.com/webdocuments/PDF/is_vista.pdf?link_id=productsTipsTricks

    Следующий шаг — запустить установку с журналированием и посмотреть, что конкретно там валится. Вполне возможно, что это криво написанный custom action, корень большинства проблем с MSI 🙂

    • Victor Ronin:

      Спасибо за ссылку. Почитаю и вполне возможно таки что-то кривое и есть, но ругать таки вполне можно.

      Спасибо им за то, что документация есть. Но, честно говоря документация по UAС и MSI откровенна сложная. И сложная не в том смысле, что много информации, а в том смысле, что приходится читать 2-3 страницы одновременно сверяя терминологию и эффекты при разных конфигурациях.

  5. Nisus:

    Насколько я помню, там есть флажок MSIUSEREALADMINDETECTION у msi-ника, который будет заставлять его отрабатывать поднятие прав. Вообще для инсталляции это не всегда нужно, частенько никаких привилегий и не требуется, если не устанавливаться в Program Files, поэтому по умолчанию инсталляторы и не поднимают привилегии. В общем можно завести setup.exe, который будет дергать msi-ник (для setup.exe привилегии поднимаются всегда) или просто установить флажок, подробнее тут:
    http://stackoverflow.com/questions/304353/mark-msi-so-it-has-to-be-run-as-elevated-administrator-account
    там же есть и скрипт для установки флажка
    http://stackoverflow.com/questions/312490/script-to-add-msiuserealadmindetection-to-msi

    • Victor Ronin:

      на флаг — погляжу.

      Насчет setup.exe, который будет дергать MSI — не подойдет. Корпорации рассылают в виде установок на машины пользователей именно MSI. Так, что .exe туда просто не добереться.

  6. Нда уж, в msi нереальное количество тонкостей, ну его в качель. Правильные менеджеры пакетов только в Linux, в винде пользуюсь InnoSetup.

  7. Аноним:

    2 Конь: если писать маленькие приложения для домашнего использования, то возможно и так. Если же стоит задача приложение правильным образом задеплоить в организации, то без MSI не обойтись. Хотя, конечно, MSI, как и любой сложный инструмент, нужно изучать.

    Впрочем, если программа установки простая, то и MSI несложно пользоваться. И быть уверенным, что программа нормально поставится, нормально откатится в случае проблем и нормально будет удалена, без всяких ошметков, остающихся в системе.

    Каждому свое 🙂

    • Да я и не спорю, что MSI это круто, только реализация этого всего — нереально плохая (по моему мнению), можно было бы сделать намного проще и без «подводных камней». Поэтому мне просто проще пользоваться InnoSetup, не охота тратить кучу времени только для того, чтобы сделать установщик для программы.

      • Victor Ronin:

        Я согласен. Собственно против сокращения MSI я ничего не имею.

        Мне не нравятся
        а) Организация script actions в MSI. ПО большему счету потратил день для того, чтобы четко понять, что после чего выполняется. После того как понял, я таки смог расшифровать фразы из документации, которые объясняли
        б) Не нравится, то что не сведено воедино как он должен себя вести во всех режимах

  8. А Вы уверены, что на хосте свежая версия WI, со всеми апдейтами и т.д.?

    Совсем недавно паковал и ставил свою апликацию на висту «for all users». Починка и ремув работали на ура. Если это повторяется на многих хостах, может что-то с доменными политиками…

  9. arkanoid:

    Я хочу заметить, что UAC это ЕДИНСТВЕННОЕ, для чего вообще нужна Виста.

    • Из этого следует вывод, что виста кал. И в ближайшие 5 лет как минимум еще XP будет жить, хоть и из продажи вылетает, зато в инете хватает. Во как даже рифмой сказал, хы. 🙂