Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.09.2016
Сообщений: 3
1

Добавление манифеста в приложение

28.09.2016, 09:23. Показов 3034. Ответов 5
Метки нет (Все метки)

Доброго всем времени суток!

Столкнулся со следующей проблемой. Написал программу, вносящую изменения в HKLM раздел реестра, но при работе программы возникает исключение типа "System.UnauthorizedAccessException" в mscorlib.dll. В дополнительных сведениях написано "Cannot write to the registry key".

Погуглив проблему, я понял, что надо добавить манифест. Я создал файл манифеста приложения, назвал его Project.exe.manifest, и в самом файле в строке requestedExecutionLevel прописал level = "requireAndministrator". Вот, что у меня в манифесте:
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="Project"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
После этого я зашел в свойства проекта и убедился, что там в строке Манифест уже указан созданный манифест. Я сделал сборку и запустил приложение. Во-первых оно по идее должно было вывести окно UAC. Этого не было. Ну и во-вторых, исключение по прежнему вылетает при попытке записи в HKLM.

Где я свернул не туда?
Очень прошу помощи!

P.S. Работаю в VS2015, если это важно.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 09:23
Ответы с готовыми решениями:

Добавление манифеста в ресурсы
Приветствую. Помогите разобраться как правильно в ресурсы программы поместить файл манифеста, дабы...

Создание манифеста
Здравствуйте! Для приложения потребовалось запрашивать администраторские права. Не могли бы...

Файл манифеста
Доброго времени суток, уважаемые! Прошу помочь с манифестом, тех кто знает. Есть программка, в...

Считывание файла манифеста
Добрый день. Столкнулся с такой задачей, нужно считать с файла манифеста андроид приложения два...

5
.NET senior
437 / 355 / 137
Регистрация: 23.09.2016
Сообщений: 980
28.09.2016, 09:34 2
Norokir, а Вы точно с правильным уровнем доступа обращаетесь к разделу реестра?

По идее должно быть так:
C#
1
RegistryKey targetKey = Registry.LocalMachine.OpenSubKey("<path_to_your_registry_key>", RegistryRight.CreateSubKey | RegistryRights.WriteKey | RegistryRights.SetValue);
0
0 / 0 / 0
Регистрация: 28.09.2016
Сообщений: 3
28.09.2016, 09:41  [ТС] 3
bax_tang, прошу прощения за мой дилетантизм, но я плохо понял, что Вы имеете в виду
Вот как я пытаюсь записать новое значение в один из параметров:
C#
1
2
3
4
5
6
                RegistryKey Software = Registry.LocalMachine.OpenSubKey("SOFTWARE");
                RegistryKey CandelaInstruments = Software.OpenSubKey("Candela Instruments");
                RegistryKey CandelaTS = CandelaInstruments.OpenSubKey("CandelaTS");
                RegistryKey SettingsKeys = CandelaTS.OpenSubKey("Settings");
 
                SettingsKeys.SetValue("ADLEnabled", 0);
После Вашего ответа, подозреваю, что где-то я тут накосячил
0
.NET senior
437 / 355 / 137
Регистрация: 23.09.2016
Сообщений: 980
28.09.2016, 09:46 4
Лучший ответ Сообщение было отмечено Norokir как решение

Решение

По умолчанию метод OpenSubKey открывает раздел реестра с флагом writeable = false.

Попробуйте вот так:

C#
1
2
3
4
5
6
RegistryKey Software = Registry.LocalMachine.OpenSubKey("SOFTWARE");
RegistryKey CandelaInstruments = Software.OpenSubKey("Candela Instruments");
RegistryKey CandelaTS = CandelaInstruments.OpenSubKey("CandelaTS");
RegistryKey SettingsKeys = CandelaTS.OpenSubKey("Settings", true); // <<<< магия!
 
SettingsKeys.SetValue("ADLEnabled", 0);
1
2331 / 1772 / 528
Регистрация: 02.08.2011
Сообщений: 5,036
28.09.2016, 09:50 5
Norokir, у RegistryKey.OpenSubKey есть перегрузка с флагом для записи:
C#
1
RegistryKey SettingsKeys = CandelaTS.OpenSubKey("Settings",true);
Добавлено через 39 секунд
не успел )
0
0 / 0 / 0
Регистрация: 28.09.2016
Сообщений: 3
28.09.2016, 09:51  [ТС] 6
bax_tang, большое Вам спасибо!!! Кучу времени потерял, думая, что проблема в манифесте.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 09:51

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Подключение манифеста. Ресурсы
Сколько инфы не читал, а толкового, походу, не нашёл. Почему? Да потому что в одном варианте нужно...

Исчезновение разрешений с манифеста
Здравствуйте! У меня такая проблема: При компиляции приложения, которое не содержит ни одного...

Редактирования файла манифеста
Здравствуйте. После сборки моего приложения в папке появляется файл манифеста. Меня смущает одна...

Трассировка на f7 не работает из-за манифеста админа
Никогда не пользовался трассировкой а хочу, в программе используется манифест чтобы запрашивало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.