Admin-Modus nur wenn benötigt?

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von TTX.exe.

    Admin-Modus nur wenn benötigt?

    Hey Leute :)

    ich habe eine kurze Sache die mich beschäftigt, ich hab ein Tool geschrieben welches mir Daten hin und her kopiert, nun ist es ja so wenn Daten im Programme Ordner hängen (z.B. "C:\Programme (x86)") muss ich mir den Admin-Modus gönnen. Nun bin ich kein sonderlicher Freund davon und würde gerne wissen ob ich den Admin-Modus wärend das Programm läuft nachträglich abrufen kann oder nur beim starten der Applikation?

    Grüße TTX 8-)
    : NV Updater | Nvidia Driver Update Tool
    Die App muss wissen, ob sie im Admin-Modus starten muss, das wird ihr zur Compile-Zeit in der Datei app.manifest mitgeteilt:
    default:
    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    Admin:
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    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!
    Die App muss wissen, ob sie im Admin-Modus starten muss, das wird ihr zur Compile-Zeit in der Datei app.manifest mitgeteilt:


    nöö. :P es reicht das aktuelle programm zu beenden und eine neue instanz zu erstellen.

    VB.NET-Quellcode

    1. Dim ObjProcess As New Process
    2. ObjProcess.StartInfo.FileName = Application.ExecutablePath
    3. ObjProcess.StartInfo.Verb = "runas"
    4. ObjProcess.Start()
    5. Application.Exit()


    runas is ne feine sache ;)
    Um zur Laufzeit Administratorrechte zu bekommen, musst du einen neuen Prozess starten, z.B. eine zweite Instanz deiner selbst. Das Verb müsste "runas" sein. Wenn du dein Programm generell so gestaltest, dass es einen eigenen Prozess zum Kopieren benutzt, sollte das kein Problem sein. ABER: Bitte achte auf die Synchronisierung, sonst gibts Datensalat. Stichwort: Mutex.
    Gruß
    hal2000
    oh nein! der böse satz :D

    die erschreckende antwort lautet: WO DU MÖCHTEST!

    es ist relativ egal, solange es in irgendeiner sub oder funktion steht! ;) sinnvollerweise sollte der code nach misslungener prüfung auf admin rechte ausgeführt werden ;)
    noch mal ne frage
    wie prüfe ich denn auf adminrechte?
    hab im forum den code gefunden

    VB.NET-Quellcode

    1. wert = Microsoft.Win32.Registry.GetValue("HKCU\...Windows\admin", Nothing, Nothing)
    2. If wert = "Adminrechte" = True Then
    3. MsgBox("AdminRechte vorhanden!")
    4. Else
    5. MsgBox("Keine")
    6. End If

    aabber da wird mir gesacht das ich einen gültigen Basisschlüssel angeben soll

    grüße
    jaaa "..." ist kein registrypfad - kein wunder oder?

    ich hab das mal so gelöst:

    VB.NET-Quellcode

    1. Try
    2. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\AdminTEST", "Test001", "Success")
    3. My.Computer.Registry.ClassesRoot.DeleteSubKeyTree("AdminTEST")
    4. Retrun True 'oder beliebige aktion - man ist Admin
    5. Catch ex As Exception
    6. If ex.Message.Contains("verweigert") = True Then
    7. Return False 'oder beliebige aktion - man ist kein Admin
    8. End If
    9. End Try

    krüppelcode FTW! :thumbsup:
    er funktioniert - jedoch leider nur auf deutschen windows systemen, weil im englsichen wohl eher "denied" oder ähnlihes als "verweigert" stehen dürfte. geht vllt auch eleganter aber damals wusste ich's nicht besser :P
    @FuFu ^ ^:

    FuFu ^ ^ schrieb:

    ObjProcess.StartInfo.Verb = "runas"

    Find ich absolut geil. :thumbsup:
    Aber zum Schreiben gewisser Registry-Einträge Admin-Rechte benötige ich Admin-Rechte, und das weiß ich zur Programmentwicklungszeit. Da fordere ich die Rechte sofort bei Programmstart.
    Außerdem ist es unschön, wenn ein Programm die Hälfte seiner Arbeit getan hat und dann mit Admin-Rechten neu gestartet werden muss.
    Ich denke, "runas" ist dafür gedacht, dass ich ein anderes Programm mit Admin-Rechten auf die Reise schicken kann.
    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!
    @Rod: Wer sagt, dass es ein anderes Programm sein muss?

    Hier sind übrigens die UAC design guidelines:
    msdn.microsoft.com/en-us/library/aa511445.aspx

    Dort verlinkt:
    msdn.microsoft.com/en-us/library/bb756990.aspx

    Sehr interessant in diesem Zusammenhang:
    msdn.microsoft.com/en-us/library/aa905330.aspx
    Gruß
    hal2000

    FuFu^^ schrieb:

    Die App muss wissen, ob sie im Admin-Modus starten muss, das wird ihr zur Compile-Zeit in der Datei app.manifest mitgeteilt:


    nöö. :P es reicht das aktuelle programm zu beenden und eine neue instanz zu erstellen.

    VB.NET-Quellcode

    1. Dim ObjProcess As New Process
    2. ObjProcess.StartInfo.FileName = Application.ExecutablePath
    3. ObjProcess.StartInfo.Verb = "runas"
    4. ObjProcess.Start()
    5. Application.Exit()


    runas is ne feine sache ;)
    Danke das ist eine gute Idee :) Ich möchte nämlich nicht ständig einen Admin-Modus anfordern müssen ;) so kann ich prüfen ob sich die Daten im Programm-Folder befinden und wenn ja den Admin-Modus durch eine neue Instanz mit einem Hinweis holen :D! Coole Sache
    : NV Updater | Nvidia Driver Update Tool
    Ab besten, Du führst einen Befehl aus, der nur von einem Administrator durchgeführt werden darf, z.B. das Lesen eines Registryeintrages in LOCAL_MACHINE\SOFTWARE\...
    kannst Du ja ausprobieren. Kommt eine Exception, hast Du keine Admin-Rechte.
    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!
    Teste es lieber mal aus, ist ja nicht viel Code...
    Wie man meiner Meinung nach an den Bildern erkennen kann, heißt es im Label Yup, sobald du es als Admin ausführst :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    Teste es lieber mal aus, ist ja nicht viel Code...
    Wie man meiner Meinung nach an den Bildern erkennen kann, heißt es im Label Yup, sobald du es als Admin ausführst :P
    Kann ich gerade nicht, bin auf Arbeit und hab nur Kbasic installiert ;) Ich werde mir das heute Abend mal ansehen, danke für den Tipp :thumbup:
    : NV Updater | Nvidia Driver Update Tool