Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обойти Win7 UserAccountControl, Запись файла 
V
    Опции темы
borisbn
Дата 20.6.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



> Прибил бы того кто придумал
эту ........................... :(
Ты не одинок ;)


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Любитель
Дата 20.6.2011, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Покажи плиз, как называется файл манифеста и что у тебя в нём написано?


--------------------
PM MAIL ICQ Skype   Вверх
loneybibi
  Дата 21.6.2011, 13:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(borisbn @ 20.6.2011,  19:24)
> Прибил бы того кто придумал
эту ........................... :(
Ты не одинок ;)

Это радует! smile

Добавлено @ 13:58
Цитата(Любитель @ 20.6.2011,  20:10)
Покажи плиз, как называется файл манифеста и что у тебя в нём написано?

Читай мой пост ниже я там все написал!

Добавлено @ 14:02
Доел все таки вчера мануалы и вопрос решил. smile

Осторожно много буков! smile

Сразу оговорюсь что просто так взять и положить 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! smile

Внутреннее описание manifest файла исполнено на XML. Думаю разобраться с его содержимым проблем не будет.

Приведу шаблон manifest файла, который позволит приложению работать и на Windows 7 и на Windows XP.
Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>


Подробно рассматривать этот шаблон не буду, нас больше всего интересует параметр в разделе "requestedExecutionLevel" level. Этот параметр может иметь одно из трех значений: asInvoker, highestAvailable и requireAdministrator. Приложения которым не нужны административные привилегии имею значении этого свойства равным "isInvoker". Когда нужно получить максимальные права доступа нужно установить значение равным "highestAvailable". Ну и если установить значение равным "requireAdministrator" приложение перед запуском будет спрашивать пользователя о разрешении доступа как администратора. Параметр "uiAccess" по умолчанию имеет значении "false", значение "true" для этого параметра будет давать приложению повышенные права и доступ к процессам системы, но в этом случае на сколько я понял из MSDN необходима цифровая подпись.

Теперь опишу сам процесс этого действа! smile

Первый вариант если вы собираете проект в Visual Studio с вложенным manifest файлом в исполняемый как ресурс. Для начала собираем наш проект. После окончания сборки в каталоге с нашим исполняемым файлом компилятор создаст manifest файл с именем "%app_name%.exe.intermediate.manifest", вставка "intermediate" в имени файла говорит нам о том что это промежуточный manifest. Открываем его любым удобным текстовым редактором и редактируем по шаблону выше и сохраняем. Далее делаем сборку нашего проекта еще раз. Если отладочная консоль компилятора не выдала ошибок значит у нас все получилось и наш manifest успешно вложен с исполняемый файл и уже никуда не потеряется. В этом случае manifest не надо тягать вместе с приложением. smile 

Второй вариант опять же если мы собираем проект на 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. Очень радует что нам все таки оставили такую возможность! smile В комплекте с Visual Studio есть утилита, называется "mt.exe", для вложения manifest файла в исполняемый как ресурса. Для этого заранее подготавливаем manifest в текстовом редакторе и сохраняем его рядом с нашим исполняемым файлом например под именем "temp.manifest". Далее идем в командную строку Visual Studio, заходим в каталог с нашим исполняемым файлом, где так же должен лежать manifest, и выполняем команду:

Код

mt.exe -manifest %имя_файла_манифеста%.manifest -outputresource:%имя_нашего_приложения%.exe;#1


Первый параметр задает имя файла manifest, второй куда вшивать. Номер после точки с запятой это порядковый номер ресурса. В MSDN было написано что можно вшивать несколько manifest файлов но для чего я не разобрался. В нашем случае он будет первый и единственный. Вообщем у меня в командной строке получилось вот так:

Код

mt.exe –manifest temp.manifest –outputresource:TestApp.exe;#1


Если manifest файл написан правильно, нет ошибок синтаксиса и на выводе программы нет ошибок значит manifest успешно вшит в исполняемый файл. С помощью этой утилиты можно вшивать manifest в почти любые приложения написанные не только на "Cи".

Если есть исправления или дополнения к выше написанному пишите! smile

Материалы для более глубокого познания (:
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
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0801 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.