Автоматический запуск программы от имени администратора в VB.NET

#windows #vb.net #windows-7 #administrator

#Windows #vb.net #windows-7 #администратор

Вопрос:

Я разрабатываю VB.NET приложение на основе, которому требуются права администратора для правильной работы. Однако я просмотрел несколько онлайн-руководств, и во всех них упоминалось, как это сделать, используя файл mainifest. Проблема с этим методом заключается в том, что при каждом открытии программы мне нужно вводить пароль администратора, однако я хочу, чтобы это происходило автоматически. (Пользователь не должен вводить пароль администратора, пароль должен вводиться на уровне кода)

Следующий код — самый близкий, который я смог найти, но он тоже не удовлетворяет моей проблеме,

 Dim securePass As New Security.SecureString()
Dim pass As String = "password"

For Each c As Char In pass
    securePass.AppendChar(c)
Next

' If there isn't a domain, set the argument to 'Nothing', as demonstrated below.
Process.Start("testsoftwareWinKBSelWinKBSel1003.exe", "username", pass, Nothing)
  

Не мог бы кто-нибудь, пожалуйста, сообщить мне, как я мог бы это сделать, не требуя от пользователя ввода пароля администратора?

Ответ №1:

Вероятно, было бы лучше разделить приложение, если бы у вас была внутренняя служба, которая работает под учетной записью администратора, ваше приложение могло бы использовать ее для выполнения необходимых действий с повышенными привилегиями. UAC разработан для защиты пользователя от него самого, вы можете обойти это, добавив серверную службу… но будьте очень осторожны при открытии дыр таким образом, поскольку они могут быть использованы другими приложениями / вирусами. Хранение пароля администратора внутри приложения всегда является плохой идеей, поскольку приложение может быть декомпилировано и пароль извлечен.

Комментарии:

1. Хорошо, в принципе, создав отдельную учетную запись пользователя, имеющую только те привилегии, которые мне требуются, и используя эту серверную службу, можно автоматически войти в программу как этот пользователь. Не могли бы вы, пожалуйста, сообщить мне о некоторых инструментах внутренней службы

2. Напишите службу Windows на c # msdn.microsoft.com/en-us/library/aa984464 (v = vs.71).aspx а затем установите некоторый канал связи между вашим интерфейсным приложением и вашей службой (TCP / WCF / Именованные каналы, что угодно). Для первой установки службы вам понадобятся права администратора, но после этого у вас будет столько доступа, сколько вам нужно, если вы устанавливаете svc для запуска под учетной записью администратора.

Ответ №2:

Вы не можете создать программу, которая будет автоматически входить в систему как пользователь, если имя пользователя / пароль уже не известны.

Это означает, что вы либо ограничены запуском в системах, где ваше приложение уже знает учетные данные, ваш пользователь должен ввести учетные данные в ваше приложение, либо ваш пользователь должен использовать функциональность «Запуск от имени» в Windows, чтобы использовать правильного пользователя.

Если бы то, что вы предлагаете, было действительно возможно, это представляло бы собой огромную брешь в безопасности: вы могли бы запускать любой код от имени любого пользователя, не требуя сначала аутентификации. Это нехорошо!

Подумайте об этом так: если бы вам продали программу, которая будет автоматически входить в систему от имени администратора даже без вашего разрешения, как бы вы себя чувствовали?

Ответ №3:

UAC разработан таким образом, что вы не можете делать то, что хотите. UAC гарантирует, что для повышения уровня пользователь должен пройти через диалоговое окно UAC (либо диалоговое окно согласия администратора, либо диалоговое окно «через плечо»). Вам необходимо адаптировать свои ожидания к реальности UAC.

Ответ №4:

Вам не нужен код для этого действия, UAC создан таким образом, что вы можете автоматически входить в систему без разрешения пользователя. Что вы можете сделать, это использовать манифест и изменить режим запуска, чтобы при запуске приложения оно запускалось от имени администратора и запрашивало разрешение! Измените манифест. посмотрите это!

Комментарии:

1. изменение манифеста — это то, что Юсуф уже сделал. Вопрос в том, «как это может произойти без ввода пользователем пароля администратора», и ваш ответ вообще не касается этого.