Prüfen ob User Adminrechte besitzt - SuFu und Google genutzt

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Ninoxo.

    Prüfen ob User Adminrechte besitzt - SuFu und Google genutzt

    Hey ihr :)

    Ich würde gerne testen ob der angemeldete User Adminrechte hat.
    Bisher sind jegliche Versuche meinerseits, sowie alle Suchergebnisse
    zu nichts zu gebrauchen gewesen.

    Derzeitiger Code:

    VB.NET-Quellcode

    1. AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
    2. Dim principal As WindowsPrincipal = DirectCast(Thread.CurrentPrincipal, WindowsPrincipal)
    3. MsgBox(principal.IsInRole(WindowsBuiltInRole.Administrator))


    Mir wird immer 'Flase' zurückgegeben, auch wenn ich Admin bin.
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Vllt. führst Du einen Befehl aus, der nur mit Admin-Rechten funktioniert, z.B. Zugriff auf einen geschützten Registry-Bereich. Ist der Zugriff erfolgreich -> Admin, gibt es eine Exception -> kein Admin.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich kann das Problem auchnicht mit TryCatch abfangen...
    Kennt denn jemand eine andere Methode zum überprüfen ?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Du kannst 1. sagen dass das prog nur als admin ausgeführt werden kann oder versuch es so:

    VB.NET-Quellcode

    1. Try
    2. IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.System) + "explorer.exe")
    3. Catch ex As UnauthorizedAccessException
    4. 'kein admin
    5. Catch ex As Exception
    6. 'admin
    7. End Try

    wenn du kein admin bist hast du den fehler dass du kein recht hast, wenn du admin bist den fehler das die datei gerade in verwendung ist

    ist aber vllt nicht die beste möglichkeit
    Aber ich würde nicht versuchen den Explorer zu löschen, was wenn ihn mal Kills oder er abstürzt, was vorkmmen kann, ich würde eher versuchen die Datie zu öffnen oder ähnliches, oder in einem Admin Verzeichnis eine Datei zu erstellen.
    @Warfley

    Bei mir kann der explorer aber gelesen werden ;P

    Ich habe nun jedoch eine passende Funktion gefunden:

    VB.NET-Quellcode

    1. Public Function IsUserAdmin() As Boolean
    2. Dim oGroup As Object
    3. Dim oMember As Object
    4. Dim sUserName As String
    5. ' Fehlerbehandlung aktivieren, falls ADSI
    6. ' nicht verfügbar oder nicht darauf zugegriffen
    7. ' werden kann
    8. On Error GoTo ErrHandler
    9. ' Name des aktuellen Benutzers
    10. sUserName = Environ$("USERNAME")
    11. ' Gruppe der Administratoren für den lokalen Rechner
    12. Set oGroup = GetObject("WinNT://./Administratoren,group")
    13. ' alle User in der Administratoren-Gruppe durchlaufen
    14. For Each oMember In oGroup.Members
    15. If oMember.Name = sUserName Then
    16. ' aktueller Benutzer ist vorhanden!
    17. IsUserAdmin = True
    18. Exit For
    19. End If
    20. Next
    21. ErrHandler:
    22. ' Objekte zerstören
    23. Set oMember = Nothing
    24. Set oGroup = Nothing
    25. End Function



    Allerdings möchte ich auch wenn das Programm als Admin ausgeführt,
    der User jedoch kein Admin ist, False bekommen.
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Ninoxo schrieb:

    VB.NET-Quellcode

    1. On Error GoTo ErrHandler

    Eigentlich dachte ich, wir reden von VB.NET.
    @Ninoxo:
    Fang zunächst an, mit
    Option strict On .NET-Code zu schreiben und zu verstehen. Dann sehen wir weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Klar, aber der Code funktioniert ja trotzdem.
    Eine .net lösung wäre mir natürlich lieber,
    aber funktionieren soll das ja auch.
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    So hier hast noch eine .Net lösung:

    VB.NET-Quellcode

    1. Dim wi As WindowsIdentity = WindowsIdentity.GetCurrent()
    2. Dim wp = New WindowsPrincipal(wi)
    3. If Not wp.IsInRole(WindowsBuiltInRole.Administrator) Then
    4. 'Funktion
    5. End If


    Ich hoffe die Hilfst dir ;D
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Genau das ist doch die Funktion aus Post 1, nur
    anders geschrieben ?!
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!