Запуск приложения от имени администратора

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Запуск приложения от имени администратора

Сообщение 773FF » 19.02.2010 (Пт) 16:12

Необходимо запустить приложение от имени администратора в сеансе пользователя с неадминистраторскими правами под ОС Windows 7, причём без участвия пользователя. Т. е. где-то сохранить зашифрованный пароль админа и им пользоваться.
Пробовал так:

Код: Выделить всё
        Dim myProcess As New Process()
        myProcess.StartInfo.FileName = "App.exe"
        myProcess.StartInfo.WorkingDirectory = My.Application.Info.DirectoryPath
        myProcess.StartInfo.Verb = "Open"
        Dim s As String = "Password"
        Dim ApplicationPasswords As New System.Security.SecureString()
        For Each c As Char In s
            ApplicationPasswords.AppendChar(c)
        Next
        myProcess.StartInfo.UseShellExecute = False
        myProcess.StartInfo.UserName = "User"
        myProcess.StartInfo.Password = ApplicationPasswords
        myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
        myProcess.Start()

Из сеанса администратора работает, в сеансе простого пользователя выдаёт ошибку: "Требуеться повышение".

Тогда я попробовал класс RunAs_Impersonator: http://williamfaulkner.co.uk/wordpress/2009/04/vbnet-run-as-administrator-impersonate-a-user-2008/.

Код: Выделить всё
            Dim imp As New RunAs_Impersonator

            imp.ImpersonateStart("", "User", "Password")

            Dim myProcess As New Process()
            myProcess.StartInfo.FileName = "App.exe"
            myProcess.StartInfo.WorkingDirectory = My.Application.Info.DirectoryPath
           
             imp.ImpersonateStop


Что-то не помогло, приложение запускается, но выдаёт какую-то ошибку инициализации.

Как это самое повышение сделать без участия пользователя?

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Запуск приложения от имени администратора

Сообщение 773FF » 19.02.2010 (Пт) 16:27

Кажется сам нашёл ошибку: надо " imp.ImpersonateStart("", "User", "Password")" заменить на " imp.ImpersonateStart(".", "User", "Password")".
Сейчас проверю, отпишусь.

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Запуск приложения от имени администратора

Сообщение 773FF » 19.02.2010 (Пт) 16:41

Увы, но работает только из сеанса администратора или от имени администратора. В сеансе пользователя выдаёт "Unknown error (0x2)". Что делать?

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Запуск приложения от имени администратора

Сообщение 773FF » 25.02.2010 (Чт) 22:04

Если кому-то это интересно, то работает так:

Код: Выделить всё
        Dim myProcess As New Process()
        myProcess.StartInfo.FileName = "App.exe"
        myProcess.StartInfo.WorkingDirectory = My.Application.Info.DirectoryPath
        myProcess.StartInfo.Verb = "Open"
        Dim s As String = "Password"
        Dim ApplicationPasswords As New System.Security.SecureString()
        For Each c As Char In s
            ApplicationPasswords.AppendChar(c)
        Next
        myProcess.StartInfo.UseShellExecute = False
        myProcess.StartInfo.UserName = "UserName"
        myProcess.StartInfo.Password = ApplicationPasswords
        myProcess.StartInfo.Domain = Nothing
        myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
        myProcess.Start()


Просто, если домена нет, то
Код: Выделить всё
myProcess.StartInfo.Domain = Nothing
Это работает.
P. S.: когда UAC выключен :-(

AlekseyVB
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 10.04.2009 (Пт) 18:47

Re: Запуск приложения от имени администратора

Сообщение AlekseyVB » 26.02.2010 (Пт) 15:22

где-то сохранить зашифрованный пароль админа и им пользоваться

То есть надо изначально знать пароль админа? А можно как-нибудь не зная его? :)

В XP работает данный способ?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Запуск приложения от имени администратора

Сообщение Viper » 26.02.2010 (Пт) 21:51

AlekseyVB писал(а):
где-то сохранить зашифрованный пароль админа и им пользоваться

То есть надо изначально знать пароль админа? А можно как-нибудь не зная его? :)

В XP работает данный способ?
Это уже из области "как прочитать файл не открывая его"
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 35

    TopList