Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Запуск с правами админа


Автор: tolan96 2.3.2012, 17:26
Доброго времени суток.

Ситуация:
 На машине есть 3 пользователя:
 1) Vasya (пользователь)
 2) admin (администратор)
 3) administrator (администратор)

Пароль пользователя administrator изменили на неизвестный. Виновник скрылся.
Задача - поменять пароль administrator'a.
Можно войти под учеткой admin'a и с лёгкостью поменять пароль, но...

Осложнения:
Машина находится в г. Урюпинск. Доступа у админов к ней нет.
Доступ есть только у Vasya'и, а сказать ему пароль пользователя admin мы не можем.
Так что родилась мысль написать программу (A), которая меняла пароль учетки.

С первого взгляда всё просто. Код, изменяющий пароль:
Код

// login - administrator.
// password - новый пароль.
private static void ChangePass(string login, string password)
        {
            DirectoryEntry theEntry = new DirectoryEntry("WinNT://" +
                                                         Environment.MachineName + ",computer");
            DirectoryEntry theUser = theEntry.Children.Find(login, "user");
            theUser.Invoke("SetPassword", new object[] { password });
            theUser.CommitChanges();
            Console.WriteLine("Cмена пароля успешно произведена.");
        }


Но, само собой этот код требует определенных прав. То есть Vasya не может выполнить программу с выше указанным кодом, т.к. у него нет прав.
Для решения этого вопроса приложение решено запускать с правами админа (admin, та учетка пароль от которой мы знаем).
Создана маленькая программа(B) в которой осуществляется вызов приложения A
Код вызова А:
Код

public static void RunAs( string username, string password)
        {
            ProcessStartInfo myProcess = new ProcessStartInfo("C:\\" + programmName);
            myProcess.UserName = username;// admin
            myProcess.Password = MakeSecureString(password);
            myProcess.Domain = Environment.MachineName;
            myProcess.UseShellExecute = false;
            myProcess.Verb = "runas";
            Process.Start(myProcess);
        }


Провожу тест у себя.

Запускаю программу B, она запускает А и... исключение. У вас нет прав...
Лезу в диспечер задач. Приложение запущено от имени: admin. Всё правильно, но прав нет!

Хм... ПКМ -> Запустить от имени администратора. (admin)
Работает! Но Vasya'е так делать не надо. Он же не знает пароля admin'а...

У кого-нибудь есть идеи, как запустить программу с правами Администратора из под C#?

Автор: fedyunina 13.3.2012, 17:28
а не проще просто загрузиться с ERD Commander и сбросить пароль?  smile 

Автор: kin 13.3.2012, 19:10
Привет! А машина, которая в Урюпинске, может выйти в Интернет? Если да, то может это http://www.ammyy.com/ru/downloads.html поможет? 

Автор: tolan96 14.3.2012, 16:48
Цитата

а не проще просто загрузиться с ERD Commander и сбросить пароль?    

Научить Васю пользоваться  ERD Commander'ом?!?! Он же потом делов натворит!!! smile 

Цитата

Привет! А машина, которая в Урюпинске, может выйти в Интернет? Если да, то может это http://www.ammyy.com/ru/downloads.html поможет? 

Он не сможет установить или запустить программу без админских прав... smile 

А вобще, код, который я написал в первом посте, должен работать!!! Но никак не могу понять почему права не появляются... smile 

Автор: fedyunina 14.3.2012, 21:50
tolan96, а ОС какая? ХР? может безопасность винды все это дело режет?

Добавлено через 1 минуту и 41 секунду
или еще идея, настройте TeamViewer, возьми и запусти через него программку от администратора. когда ты будешь вводить пароль, он его не увидит smile

Автор: kin 14.3.2012, 22:23
Цитата(tolan96 @  14.3.2012,  16:48 Найти цитируемый пост)
Он не сможет установить или запустить программу без админских прав... 
Ее не надо устанавливать, нужно чтобы он ее запустил из любой папки, где у него есть на то права ("Мои документы", "Рабочий стол" и пр.) , сообщил тебе номер (телефон, телеграф,телепатия и пр.), который она ему даст и больше ее не трогал. На твоей стороне будет работать такая же  штука, в которую ты введешь это номер и соединишься с нужной тебе железкой...

Автор: tolan96 20.3.2012, 09:08
Хм... Ок, попробуемс.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)