PDA

Просмотр полной версии : [Помогите!] Админские права в проге


Неkто_Я
03.11.2011, 12:15
Добрый день!
Нужно, чтобы программа, когда ее просто запускает юзер запускалась без админских прав (а лучше, чтобы по-тихому без ошибки закрывалась). А вот, когда эту программу открывает другая, то чтобы запускалась с админскими правами.
Реально ли такое реализовать, и если да, то как? (хотя бы на какую тему гуглить)

AJIACTOP
03.11.2011, 12:37
Ну можна сделать чтобы "другая" программа открывала "эту" с параметрамы. Скажем в параметрах передавать секретный ключ известный только вам.
Process.Start("ваше_пр.exe","секретный_ключ")
А в другой в методе main уже проверять что пришло, если ключ не передан выход.

static void Main(string[] args)
{
if (args.Length > 0)
{
if (args[0] != "секретный_ключ")
return;
}
else
return;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}

•theSaboteur•
03.11.2011, 12:40
Проверка на администраторские права:

WindowsPrincipal wp = new WindowsPrincipal(WindowsPrincipal.Identity);
if(!wp.IsInRole(WindowsBuiltInRole.Administrator)) {
Environment.Exit(Environment.ExitCode);
}

Вкратце:
WindowsPrincipal - .net класс, предназначеный для определения принадлежности юзера к какой-либо группе.
WindowsPrincipal.Identity - св-во, возвращающее текущее, цитирую msdn, удостоверение пользователя.
IsInRole - функция проверяющая пользователя на принадлежность к группе с, переданным в качестве аргумента, идентификатором.
Exit - вобщем-то понятно.
Попытка запуска от админа:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "path to executable file";
psi.Verb="runas";
Process.Start(psi);

В висте/семерке должно вылететь окошко UAC.
Verb - сет команд выполняемых при запуске.
p.s:
ProcessStartInfo MSDN ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
WindowsPrincipal MSDN ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
p.p.s:
Аластор, количество аргументов командной строки в любом случае больше нуля - т.к. туда всегда передается еще и адрес исполняемого файла :)
И при чем тут вообще это? Человеку требуется:
1.запустить исполняемый файл с правами администратора.
2. проверить наличие прав администратора.
p.p.p.s:
Запуск с правами администратора, с помощью манифестов:
▲Click_Me▲ ([Ссылки могут видеть только зарегистрированные и активированные пользователи])