![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
goa_dreamer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 12.1.2008 Репутация: нет Всего: 1 |
Делюсь некоторым опытом решения задачи записи в реестр с помощью Delphi 6-7.
В Windows Vista и Windows 7 присутствует виртуализация реестра. Даже если ваш пользователь имеет права администратора, и ваша программа не запущена с "высокими правами" на Windows Vista/Windows 7, ваше приложение еще не сможет записывать в реальный ключ реестра HKEY_LOCAL_MACHINE. Она будет читать и записывать в виртуализированную копию соотвествующего ключа HKEY_LOCAL_MACHINE, которую видит только тот конкретный пользователь. Происходит перенаправление и чтение/запись происходит по пути: HKEY_LOCAL_MACHINE --> HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE Под "высокими правами" подразумывается, что вы прошли запрос от UAC (User Account Control) в Windows Vista/Windows 7. Например запустите Regedit.exe, и вы получите запрос на выполнение. Решением данного вопроса может быть добавление манифеста в ваше приложение. Пример добавления в следующей ссылке: http://delphi.about.com/od/delphitips2009/...-on-startup.htm Запуск UAC запроса при необходимости: http://stackoverflow.com/questions/923350/...ion-when-needed |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
А зачем туда записывать без прав админа? Поставь себя на месте сисьадмина. Предствь, что какая-то левая непонятная программа начнёт писать в "системный" раздел реестра всякую ересь. Хорошо, если это ещё не вирус... Добавлено через 59 секунд Наверное, правильно было бы это назвать "поднятие прав". |
|||
|
||||
goa_dreamer |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 12.1.2008 Репутация: нет Всего: 1 |
В чем была моя задача.
1. Запись расширения файлов моего приложения, например ".abc", должно произойти по-пути HKEY_CLASSES_ROOT\.abc При попытке получения прав записи в данную ветку под windows 7 мое приложение вылетает с ошибкой о невозможности записи (установки) данных для данной ветки. С помощью монитора, вижу при попытке установить права Записи, получаю отказ. Тоесть HKEY_CLASSES_ROOT является защищенной. 2. Запись полученного сертификата пользователя с сервера в реестр должно происходить в HKEY_LOCAL_MACHINE, так чтобы все пользователи машины имели доступ к сертификату. На самом деле запись идет в HКEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE или HKEY_LOCAL_MACHINE\Software\Wow6432Node (в зависимости от 32-битной Windows или 64-битной Windows). С одной стороны права записи и чтения работают нормально, со стороны моего приложения реестр будет виден как HKEY_LOCAL_MACHINE. Но с обратной стороны, если мне нужно получить данные о Windows, или какой-то части реестра, смогу видеть только виртуальную сторону. Так же для этого существует флаг KEY_WOW64_64KEY, которое указывает что приложение на 64-битной Windows должно работать c 64-битным видом реестра. Этот флаг игнорируется 32-битной Windows. Добавлено @ 12:09 Сделал тест, скомпилировал свое приложение Delphi без манифеста. Запуск без прав администратора дает запись в виртуальную ветку реестра. Перезапустил с правами администратора, запись произошла в HKEY_LOCAL_MACHINE\Software\<Ветка моего приложения> Часть кода для примера:
Запуск вашего приложения с срабатыванием User Account Control: 1. Создать файл ApplicationExeName.manifest с следущим содержимым:
2. Создать файл ApplicationExeName.RC:
3. Скомпилировать ApplicationExeName.REC с помощью: Delphi\Bin\brcc32.exe ApplicationExeName.RC -fo ApplicationExeName.REC Полученный файл скопировать в папку вашего проекта. Добавить строку после {$R *.res} в вашем .dpr файл: {$R ApplicationExeName.REC} Во время попытки запуска приложения вы получите: Unable to create process: The Requested operation requires elevation. Тоесть вам нужно скомпилировать ваше приложение с помощью Delphi и запустить его с помощью Explorer'a Windows для запуска UAC проверки. Это сообщение отредактировал(а) goa_dreamer - 15.1.2013, 12:51 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |