2016-05-02 12 views
3

Ich habe eine Anwendung in vb.net entwickelt, die Administratorrechte benötigt. Ich habe level = "requireAdministrator" im Anwendungsmanifest gesetzt. Mein Client möchte, dass diese Anwendung aufgrund einiger Einschränkungen in ihrer Organisation von einem lokalen Benutzer ausgeführt wird. Also habe ich eine andere "Launcher" -Anwendung erstellt, die die Anmeldeinformationen eines Administrators in einem verschlüsselten Format speichert und die gespeicherten Anmeldeinformationen verwendet, um die Anwendung "Original" auszuführen.Process.start() werfen Fehler beim Versuch, als Administrator zu laufen

Alles funktioniert gut, wenn ich das Konto "Administrator" (Built-in-Konto) verwende. Aber wenn ich die Anmeldeinformationen des manuell erstellten Administratorkontos verwende - die process.start() - Zeile gibt einen Fehler aus "Die angeforderte Operation erfordert eine Erhöhung" Ich konnte den Unterschied zwischen dem integrierten Administrator und manuell nicht feststellen Administratorkonto erstellt Ich habe bestätigt, dass sowohl die Benutzer (integriert als auch manuell erstellt) Mitglieder von Administratoren und HomeUsers sind. Ich habe alle Möglichkeiten ausprobiert, indem ich verschiedene Benutzer mit verschiedenen Benutzergruppen und sogar mit verschiedenen Betriebssystemen (Windows 7 und Windows 10 - sowohl 32 als auch 64 Bit Versionen) erstellt habe - aber alle funktionieren auf die gleiche Weise wie oben beschrieben. Gibt es irgendetwas, das ich in meinem Code ändern muss?

 Dim psi As New System.Diagnostics.ProcessStartInfo() 
     psi.FileName = (AppToStart) 
     psi.RedirectStandardError = True 
     psi.RedirectStandardOutput = True 
     psi.CreateNoWindow = True 
     psi.UseShellExecute = False 
     psi.UserName = TbUser.Text 
     psi.Password = ConvertToSecureString(TbPass.Text) 
     psi.Domain = "" 
     Dim p As Process = Process.Start(psi) 

Zusätzliche Informationen: Hier renne ich diese ‚Launcher‘ Anwendung als Standardbenutzer (nicht Administrator) und die Anwendung funktioniert gut und es hebt wirklich die Privilegien, wenn

TbUser.Text = „Administrator "Und TbPass.Text = 123 (Administratorkennwort).

Aber dies ist nicht erhebend Privilegien wenn

TbUser.Text = „Adminuser“ (der auch ein Administrator ist, gehören zur gleichen ‚Administratoren‘ Gruppe) und TbPass.Text = 321 (Passwort für Adminuser).

+2

Mögliche Duplikat [Elevating Privilegien funktioniert nicht mit UseShellExecute = false] (http://stackoverflow.com/questions/3596259/elevating-privileges-doesnt-work-with-useshellexecute-false) – GSerg

Antwort

1

Leider Sie diese nicht tun können, und hier ist, warum ...

Grundsätzlich verb nicht erkannt, wenn psi.UseShellExecute = False, diese psi.UseShellExecute = True sein müsse. Sie tun dies, während Sie versuchen, runas als eine erhöhte Berechtigung zu verwenden. In Ihrer Situation würden Sie nicht verb = runas verwenden, stellen Sie sicher, dass die Anwendung bereits mit den richtigen Berechtigungen gestartet wurde.

Bitte lesen Sie mehr here über Privilegien erhebend, Hans Passant sagen ist es am besten ...

+0

@MaliCMT: Zusätzlich können Sie eine Hintergrundanwendung erstellen, die mit erhöhten Rechten gestartet wird. Ihre Hintergrund-App startet dann den gewünschten Prozess mit der umgeleiteten Ausgabe und die backgound-App schließt sich selbst. Jetzt müssen Sie nur den richtigen Prozess finden, indem Sie die ID aus der Hintergrund-App abrufen oder einfach nur nach dem Namen suchen. –

+0

@zaggler: Sie haben Recht. Tatsächlich habe ich die .verb = "runas" als Teil des Testens verschiedener Möglichkeiten gesetzt und vergessen, sie beim Posten aus dem Code zu entfernen. Ich habe die Linie entfernt. Danke für Ihre Rückmeldung. Leider hat deine Antwort meine Frage nicht beantwortet. Ich habe meine Frage etwas klarer gestellt. – MaliCMT

Verwandte Themen