![]() |
|
![]() ![]() ![]() |
|
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Здравствуйте, уважаемые.
![]() Пишу Updater для своей программы, вроде все получилось, но заметил одну очень большую проблему. В Window 7 есть такая штука как User Account Control. Проблема в том что он моему Updater'у не дает записать новый файл вместо старого. Если его отключить то все нормально. Думаю кто то уже сталкивался с такой проблемой, подскажите что делать, как обойти эту систему контроля ? Нашел в описании UAC что нужно указать в манифест-ресурсе уровень доступа программы: asInvoker, highestAvailable или requireAdministrator. Программа будет иметь соответствующие права уже при запуске. Но как это сделать в Qt ? Заранее благодарен за, Ваши ответы! ![]() Это сообщение отредактировал(а) loneybibi - 20.6.2011, 13:57 -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Никак. В наборе Си++ классов, объединённых в библиотеку под названием Qt, нет понятия манифеста. Если ты компилишь MSVC, то в каталоге Release создаётся такой файл: Имя_программы.manifest Отредактируй его и распространяй вместе с программой. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
А другие методы кроме манифеста обойти или получить права UAC на запись? Или можно как то создать манифест для собранного приложения на mingw ? -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Вот такой манифест создаёт у меня MSVC для всех проектов (Qt-шных в том числе)
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
loneybibi |
|
||||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Ну я так понимаю что он не просто должен рядом лежать с приложение а как то "прикручен" к нему. Если я соберу MinGw приложение и положу манифест рядом то толку ноль!? Я просто первый раз с этим сталкиваюсь. -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
||||
|
|||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
я могу ошибаться ,но манифесты работают только с Visual Studio . Просто не пиши ничего в Program Files ,а пиши в пользовательскую папку, туда права точно будут.
|
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Да вот в том то и дело что программа устанавливается именно туда. И она качает обновления для себя, но не может их записать. -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Цитата отсюда
хз. попробуй просто положить рядом Это сообщение отредактировал(а) borisbn - 20.6.2011, 15:57 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
loneybibi |
|
||||||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Попробовал.. результата не имеет. На MSDN нашел что то про манифесты и утилиту Mage(UI).exe которая в комплекте с VS и создает эти манифесты.. Попробую это "покурить" ... Если кому интересно: http://msdn.microsoft.com/ru-ru/library/acz3y3te.aspx -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
||||||
|
|||||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
а ты качай обновления в Temp, и сделай их в виде инсталяшки с помощью Inno setup например, пущай юзверь сам их ставит
![]() ![]() |
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Как вариант ![]() ![]() -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
я просто одно время колупался с манифестами под MinGW , ничего у меня не вышло, сделал на инсталяшке. Да и для пользователя это вроде как удобно.
|
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Что то с Mingw у меня тоже не выходит! ![]() http://habrahabr.ru/company/xakep/blog/122272/ -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Манифест может быть внешним файлом. Положи рядом с приложением и назове myapp.exe.manifest.
|
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Я понимаю что он внешний файл. Но просто я сначала так рядом положил файл манифеста с приложением собранным на mingw результата не дало, потом собрал приложение на VS2008 с Qt и там компилятор сам создал манифест файл. Положил все манифесты и даже для библиотек, все равно нет результата. Он даже не пытается спросить пользователя разрешить или нет. Потом открыл утилиту mage которая генерирует манифесты. Создал манифесты для всех файлов своего приложения(скомпилированного на VS) с правами доступа Full Trust. Все равно ноль эмоций .. Он даже не хочет выдать диалог с разрешением на права.. Я сегодня целый день долблю эту стенку, уже сил нет завтра продолжу... Прибил бы того кто придумал эту ........................... :( -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
> Прибил бы того кто придумал
эту ........................... :( Ты не одинок ;) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Покажи плиз, как называется файл манифеста и что у тебя в нём написано?
|
|||
|
||||
loneybibi |
|
||||||||||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Это радует! ![]() Добавлено @ 13:58
Читай мой пост ниже я там все написал! Добавлено @ 14:02 Доел все таки вчера мануалы и вопрос решил. ![]() Осторожно много буков! ![]() Сразу оговорюсь что просто так взять и положить manifest файл рядом с приложением не будет иметь смысла, работать он так все равно не будет. Как оказалось в manifest нет ничего сложного. Просто нет нормальной документации и инструкций. И так есть несколько способов создания manifest файла для вашего приложения: 1. Если проект компилируется в Visual Studio то manifest файл будет создан компилятором автоматически и при сборке по умолчанию будет вложен("зашит") в приложение как ресурс или создан как внешний файл. 2. В комплекте с Visual Studio есть утилита mage.exe(MAnifest Generation and Edit tools), с помощью которой, как написано в MSDN можно создавать manifest файлы. Кстати сама Visual Studio и делает это через эту утилиту. В ней есть как графический интерфейс, так и возможность создания manifest файлов через командную строку. Я честно не сильно углублялся в этот вариант, кому интересно внизу поста есть ссылки на мануал с русским переводом. 3. Написать manifest файл ручками, как это сделал я, через обычный текстовый редактор. Еще есть несколько способов использования manifest файла: 1. Хранить manifest файл внешне, рядом с приложением в виде обычного XML файла, в таком случае он будет работать только если приложение собиралось на Visual Studio, потому как при сборке проекта компилятор делает в исполняемом файле пометку что manifest находится внешне а не зашит в ресурс. 2. Хранить manifest как ресурс внутри исполняемого приложения. В этом случае все равно каким компилятором было собрано приложение. В комплекте с Visual Studio поставляется утилита которая вшивает manifest в исполняемый файл. Лично меня радует тот факт что Microsoft оставил нам такую возможность, так как в моем случае приложение собрано на MinGw! ![]() Внутреннее описание manifest файла исполнено на XML. Думаю разобраться с его содержимым проблем не будет. Приведу шаблон manifest файла, который позволит приложению работать и на Windows 7 и на Windows XP.
Подробно рассматривать этот шаблон не буду, нас больше всего интересует параметр в разделе "requestedExecutionLevel" level. Этот параметр может иметь одно из трех значений: asInvoker, highestAvailable и requireAdministrator. Приложения которым не нужны административные привилегии имею значении этого свойства равным "isInvoker". Когда нужно получить максимальные права доступа нужно установить значение равным "highestAvailable". Ну и если установить значение равным "requireAdministrator" приложение перед запуском будет спрашивать пользователя о разрешении доступа как администратора. Параметр "uiAccess" по умолчанию имеет значении "false", значение "true" для этого параметра будет давать приложению повышенные права и доступ к процессам системы, но в этом случае на сколько я понял из MSDN необходима цифровая подпись. Теперь опишу сам процесс этого действа! ![]() Первый вариант если вы собираете проект в Visual Studio с вложенным manifest файлом в исполняемый как ресурс. Для начала собираем наш проект. После окончания сборки в каталоге с нашим исполняемым файлом компилятор создаст manifest файл с именем "%app_name%.exe.intermediate.manifest", вставка "intermediate" в имени файла говорит нам о том что это промежуточный manifest. Открываем его любым удобным текстовым редактором и редактируем по шаблону выше и сохраняем. Далее делаем сборку нашего проекта еще раз. Если отладочная консоль компилятора не выдала ошибок значит у нас все получилось и наш manifest успешно вложен с исполняемый файл и уже никуда не потеряется. В этом случае manifest не надо тягать вместе с приложением. ![]() Второй вариант опять же если мы собираем проект на Visual Studio только в этом случае manifest будет не зашитый в исполняемый файл а просто лежать рядом с приложением, что дает на возможность редактировать его в любое удобное время. Для этого в проводнике проектов Visual Studio, слева жмем на наш проект правой кнопкой и открываем его "Properties", далее открываем вкладку "Manifest Tools" затем "Input and Output" и свойство "Embed manifest" меняем на "No". Затем собираем наш проект и рядом с исполняемым файлом компилятор создаст внешний manifest и он уже будет иметь имя "%app_name%.exe.manifest". После чего мы его так же открываем текстовым редактором и делаем по шаблону выше. В таком случае manifest файл надо тягать вместе с приложением, в случае его отсутствия приложение будет запущено с правами "asInvoker". Третий вариант manifest для приложений которые были собраны не Visual Studio, а допустим в моем это случае Qt на MinGw. Очень радует что нам все таки оставили такую возможность! ![]()
Первый параметр задает имя файла manifest, второй куда вшивать. Номер после точки с запятой это порядковый номер ресурса. В MSDN было написано что можно вшивать несколько manifest файлов но для чего я не разобрался. В нашем случае он будет первый и единственный. Вообщем у меня в командной строке получилось вот так:
Если manifest файл написан правильно, нет ошибок синтаксиса и на выводе программы нет ошибок значит manifest успешно вшит в исполняемый файл. С помощью этой утилиты можно вшивать manifest в почти любые приложения написанные не только на "Cи". Если есть исправления или дополнения к выше написанному пишите! ![]() Материалы для более глубокого познания (: http://habrahabr.ru/company/xakep/blog/122272/ http://msdn.microsoft.com/en-us/library/bb756929.aspx http://msdn.microsoft.com/ru-ru/library/acz3y3te.aspx Это сообщение отредактировал(а) loneybibi - 21.6.2011, 14:17 -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |