Добрый день!
Нужно, чтобы программа, когда ее просто запускает юзер запускалась без админских прав (а лучше, чтобы по-тихому без ошибки закрывалась). А вот, когда эту программу открывает другая, то чтобы запускалась с админскими правами.
Реально ли такое реализовать, и если да, то как? (хотя бы на какую тему гуглить)
AJIACTOP
03.11.2011, 12:37
Ну можна сделать чтобы "другая" программа открывала "эту" с параметрамы. Скажем в параметрах передавать секретный ключ известный только вам.
Process.Start("ваше_пр.exe","секретный_ключ")
А в другой в методе main уже проверять что пришло, если ключ не передан выход.
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▲ ([Ссылки могут видеть только зарегистрированные и активированные пользователи])