Feedback

VB - Anwendung unter XP/Vista als Admin starten

Veröffentlicht von am 12/29/2006
(8 Bewertungen)
In Vista™ ist eine Technik namens User Account Protection dafür verantwortlich, dass Prozesse standardmäßig keine Administrator Rechte haben - selbst wenn man als Administrator angemeldet ist.

Es gibt eine Möglichkeiten, einen Prozess doch mit Admin Rechten zu starten.

Hier wird die Klasse System.Security.SecureString dafür verwendet, ein Password zu späteren Verwendung sicher zu speichern.

Auf das Formular müssen 2 Textboxen
txtUser und txtPass und ein Button.

Bei txtPass sollte PasswordChar auf * stehen.

Der Code kann schnell nach eigenen Bedürfnissen modifiziert werden, nur die Klasse SecureString ist leicht gewöhnungsbedürftig (man kann nur einzelne Chareacter anfügen, keine Strings übergeben).
Imports System.Security


Public Class Form1

Public password As SecureString = New SecureString()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.txtUser.Text = System.Environment.UserName
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click

        StartNewProcessWithAdminCredentials("C:\MeineAnwendung", Me.txtUser.Text)

    End Sub

    Private Function StartNewProcessWithAdminCredentials(ByVal ExecutablePathAndName As String, _
                                                         ByVal sUsername As String, _
                                                         Optional ByVal StartArguments As String = "") As System.Diagnostics.Process


        Dim newProcessStartUpInfo As System.Diagnostics.ProcessStartInfo
        Dim ReturnCode As Boolean = False

        Try

            newProcessStartUpInfo = New System.Diagnostics.ProcessStartInfo(ExecutablePathAndName, StartArguments)
            'XP oder hoeher (Vista = 6)
            If System.Environment.OSVersion.Version.Major >= 5 Then
                newProcessStartUpInfo.Verb = "runas"
                newProcessStartUpInfo.UseShellExecute = False
                newProcessStartUpInfo.Password = password
                newProcessStartUpInfo.UserName = sUsername
                Return System.Diagnostics.Process.Start(newProcessStartUpInfo)
            Else

                Return System.Diagnostics.Process.Start(newProcessStartUpInfo)

            End If
        Catch ex As Exception
            MsgBox(ex.Message)
            Return Nothing
        End Try
    End Function



    Private Sub txtPass_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPass.Enter
        password.Clear()
    End Sub

    Private Sub txtPass_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPass.KeyPress
        Select Case Asc(e.KeyChar)
            Case 33 To 126
                password.AppendChar(ChrW(Asc(e.KeyChar)))
            Case Else
                e.Handled = True
        End Select
    End Sub

End Class
Abgelegt unter Security, Vista, Admin.

1 Kommentare zum Snippet

Koopakiller schrieb am 10/25/2014:
Wenn eine Anwendung immer Administratorrechte braucht, solte man eher ein Anwendungsmanifest verwenden. In diesem kann auch Adminrechte verlangen. (Unter Win7 und 8 schon getestet, XP und Vista kommen damit wahrscheinlich auch zurrecht.)
Ich würde einer x-beliebigen Anwendung nicht meine Anmeldedaten anvertrauen.

IMHO ist es so, dass wenn man keine Anmeldedaten angibt, dass der Benutzer dann gefragt wird.
 

Logge dich ein, um hier zu kommentieren!