Разрешения Win7 (запись в реестр) в консольном приложении C # с аргументом командной строки - PullRequest
0 голосов
/ 22 февраля 2012

Я использую Win7 Pro x64.
Я сделал небольшое консольное приложение, которое получает параметры из командной строки и выполняет некоторые действия на основе этих параметров и конфигурации из реестра.
Основная цель - он должен быть переносимым, я имею в виду один EXE-файл.

Я хотел сделать что-то вроде «настройки» - по требованию пользователя приложение должно заполнить реестр значениями конфигурации по умолчанию, которые могут быть изменены позже. Поэтому я решил, что мое приложение должно запускать «установку», когда пользователь запускает его с параметром. Допустим, это должно быть

myapp.exe --setup

Что мне нужно сделать (коротко):

RegistryKey k = Registry.CurrentUser.OpenSubKey("SOFTWARE\\something\\else");
// the key exists, it's checked elsewhere
k.SetValue(optionName, optionValue);

Когда я сделал это, он выдал исключение System.UnauthorizedAccessException. Хорошо, я поймал его, чтобы сообщить пользователю с помощью MessageBox, что он должен запускать его от имени администратора.

ПРОБЛЕМА 1 : Как легко запустить приложение с аргументом командной строки в качестве администратора?
Я имею в виду, нужно ли каждому пользователю запускать его с RUNAS /user:userName "myapp.exe --setup"? Есть ли более простой способ сделать это (простой как RMB-> Запуск от имени администратора , но с параметром)?
Я попытался создать .bat файлы с myapp.exe --setup и запустить их от имени администратора, но для этого требовался полный путь к EXE, который совершенно не переносим.

ОК, есть еще одна вещь. Я наконец запустил его с RUNAS, и было выброшено исключение (пойман). Зачем? Я сделал простой тест и отключил ключ «--setup», чтобы приложение запускало «setup» без каких-либо параметров командной строки. Я нажал на него с RMB и выбрал «Запуск от имени администратора» - то же самое! Итак:

ПРОБЛЕМА 2 : Почему запуск с правами администратора не дает мне разрешения на создание / редактирование ключей в реестре?

Моя учетная запись домена находится в группе "Администраторы", и у меня никогда не было проблем с этим.

...