Разгадки Code Signing (окончательные)
Окончательно разобрался с проблемой вылезающего предупреждения при запуске моего инсталлятора с сетевого диска (понятно что тестовое окружение дурацкое, но в нем проблема проявляется).
Первая гипотеза была в том что UAC oчень умный и о чем-то таком догадывается. Похоже, это не мой случай - в моем тестовом окружении подписанная программа без слова Setup (Install, Update) в имени файла (и в детальной информации о файле - тоже) - все одно ругается лишним предупреждением.
А вот вторая - оказавшаяся правильной - идея была про манифест файла. И действительно, у моего инсталлятора в манифесте написано:
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
Как сайд-эффект, на иконке приложения появляется значок UAC, но это меньшее зло в сравнении с дополнительным предупреждением.
InnoSetup
С InnoSetup в этом месте засада, независимо от затребованных в описании инсталлятора прав (директива PrivilegesRequired) в манифест пишется asInvoked и никакого человеческого способа поменять это нету.
Нечеловеческий способ заключается в том, что надо бинарно попатчить файлы Setup.e32 и SetupLdr.e32 (в XML-ках, которые внутри этих файлов, любезно оставлено место для такого патча). Работает. Так и будем жить дальше.
Все вместе мне кажется каким-то безобразным артефактом: инсталлятор, который исходно не просит себе админских прав - запускается с дополнительным предупреждением. А если просит (прямо в манифесте) - без оного. Удивительное дело.
Comments
Заменить манифест (как и любой другой ресурс) можно с помощь
Заменить манифест (как и любой другой ресурс) можно с помощью старой доброй программы ResHack/. Разумеется, сработает это только если e32 это обычные PE EXE. Думаю, это более правильный (и человечный) способ, чем править бинарник в хекс-редакторе.
Hex-редактор сработал, а больше мне ничего и не надо. Ну то
Hex-редактор сработал, а больше мне ничего и не надо.
Ну то есть надо, конечно, это место в InnoSetup доделать, но лень.
Ура! А в InnoSetup явно баг :-( Манифест ещё можно <a href
Ура!
А в InnoSetup явно баг :-(
Манифест ещё можно mt.exe внедрять:
mt.exe manifest MyApp.exe.manifest -outputresource:MyApp.exe;1
Ну я исходники не читал, может быть там (безуспешно) пытаютс
Ну я исходники не читал, может быть там (безуспешно) пытаются это сделать и таки баг.
Там же прикольно, там зарезервировано место пробелами, чтобы поправить asInvoker в requireAdministrator (места как раз достаточно).
А вот кто это должен делать, сам innosetup или предполагается что потом я, ручками - не знаю. Может это фича такая.
А внедрить можно много чего - но вот я потратил полдня, чтобы оно работало только InnoSetup-ом (все версии и все такое - бралось строго из одного места) и обратно выписывать какие-то батники очень противно.
Оно же в исходниках! На
Оно же в исходниках! На дельфи :(
Ну да, в исходниках. На
Ну да, в исходниках. На дельфи. Чем я ее буду компилировать то?
Дык потому и смайлик такой,
Дык потому и смайлик такой, что на дельфи! Именно по этому -- что ``Чем я ее буду компилировать то?''
Там вообще в этом месте
Там вообще в этом месте какая-то беда.
InstallShield (бесплатная версия для Visual Studio) - у меня не завелся, говорит что надо его активировать и даже номерок прислали, но куда этот номерок совать я не понял, а саппорт мне не ответил.
NSIS - последняя версия вышла в 2009-м, я таких программ боюсь.
WIX - живой, но делает MSI
InnoSetup - вроде живой, но вот эта вот хрень с манифестом. И понятно, что можно манифест поменять поверх, потом переподписать, но все это какое-то чудовищное.
С файлом ресурсов тут тоже трахался изрядное время. Беру вот прямо MS-овский пример из MSDN - не работает. Редактирую версию Visual Studio - не работает.
Выдрал некий работающий неизвестно откуда, довел напильником - полегчало.
А чем пугает MSI?
А чем пугает MSI?
А ставится ли он в Wine,
А ставится ли он в Wine, например?
Не знаю, реализован ли там
Не знаю, реализован ли там Windows Installer. Но если нет -- то не будет ставится огромное число продуктов, в которых из product-setup.exe просто распаковывается и запускается MSI'шка.
А вообще, я за максимум стандартных средств. Если уже MS сделала полную поддержку инсталляции внутри системы в кои-то веки (сколько лет её не было), то ей и надо пользоваться. Ну, как в Линуксе надо по максимум пользоваться пакетной системой дистрибутива а не ./configure && make && make install :)
Ну вот в эмуляторе Linux в
Ну вот в эмуляторе Linux в FreeBSD rpm скорее всего пролетит мимо тазика.
С MSI/.exe - ну вот по каким-то причинам таки делают product-setup.exe (с MSI) внутри, а не просто MSI. А по каким?
Зависит от того, что в
Зависит от того, что в линуксолятор втянули :)))
Потому что люди привыкли, что запускается EXE -- других причин, как мне кажется нет (потому что, натурально, это самораспаковывающийся архив с командой запуска распакованного и всё). А, ну да, ещё доп. сжатие, сам MSI сжат неидеально и 7z поверх даёт ещё выигрыш, например.
А всякие redistributables и
А всякие redistributables и прочие DX9 - не ставит ведь сам, как нам тут пишут ниже?
Мне они в настоящий момент без надобности, но это же не навсегда.
проще всего использовать
проще всего использовать стандартный студийный инсталятор (не installshield). он делает и msi и setup.exe к нему и все зависимости рядом кладет. потом можно 7z все собрать в один файл для полной версии и отдавать msi, если надо поставить только новую версию.
msi до версии вроде 4 или 5
msi до версии вроде 4 или 5 мог хранить только один пакет (а все ориентируются на 3.1, который в XP), соответственно если надо больше, например зависимости, то нужен setup.exe. и вторая причина следствие первой - msi зависимости только проверяет, но не умеет ставить недостающее.
век живи, век учись. а корреляция с windows logo, видимо, по
век живи, век учись. а корреляция с windows logo, видимо, потому, что там требуют, чтобы у инсталлятора был requireAdministrator в манифесте...
Ну, вообще, программа же может ставиться в Users и писать в
Ну, вообще, программа же может ставиться в Users и писать в Registry только в HKLU. И, соответственно, ничего такого не надо.
Ну и узнать, чего программа на самом деле хочет - нельзя же не запустив ея. А ругается - заранее. У меня в тестах ругалось просто на подписанное приложение (не инсталлятор), которому точно никаких прав не надо.
Спасибо, интересно и полезно.
Спасибо, интересно и полезно.
Вот тут инносетапцы пишут, что это всё intentional, чтоб чег
Вот тут инносетапцы пишут, что это всё intentional, чтоб чего-то работало:
http://news.jrsoftware.org/news/innosetup/msg93060.html
Оно - очевидно - недоделано, хотя там осталось дел на 5 мину
Оно - очевидно - недоделано, хотя там осталось дел на 5 минут (+ еще нужно знание дельфи и компилятор, у меня оба предмета отсутствуют).
Т.е. в xml-ке уже оставлено место, где можно попатчить, осталось эту патчилку прикрутить в зависимости от настроек RequiredPrivileges (или PrivilegesRequired, никак не могу запомнить).
Но так как я пока ставлюсь в Program Files, т.е. права мне нужны (и defaults - годятся), я попатчил бинарно прямо по живому.
Да, про IE9 low-rights sandbox - жОстко. Как много я не знаю
Да, про IE9 low-rights sandbox - жОстко. Как много я не знаю и как бы я хотел этого всего не знать.
> Как много я не знаю и как бы я хотел этого всего не знать.
> Как много я не знаю и как бы я хотел этого всего не знать.
Это очень мудрые слова. Фактически мой девиз как профессионального программиста.
Как много нам открытий чудных готовит виндоуз-сэвэн дух? :)
Как много нам открытий чудных готовит виндоуз-сэвэн дух? :)
О да. Я тут вчера впервые сделал деплой под Max OS X. Просто
О да.
Я тут вчера впервые сделал деплой под Max OS X. Просто запускаешь macdeplyoyqt -dmg - и получаешь работающий dmg. Удивительное дело.
Да, пока криво и косо, много чего не понимаю, но оно натурально проще, чем под виндой.
Как много я не знаю и как бы я хотел этого всего не знат
User referenced to your post from Как много я не знаю и как бы я хотел этого всего не знать saying: [...] ...сказал Тутубалин в каментах к этому посту: http://alextutubalin.livejournal.com/292695.html [...]
Аплодирую упорству :)
Аплодирую упорству :)
Времени, на самом деле, ушло мало. Идею с манифестом мне под
Времени, на самом деле, ушло мало. Идею с манифестом мне подсказали, а попатчить его по живому и проверить - дело трех минут