![]() |
|
![]() ![]() ![]() |
|
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. |