Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Prüfen ob Anwendung mit Administratorrechten gestartet wurde
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

Themenstarter:

Prüfen ob Anwendung mit Administratorrechten gestartet wurde

beantworten | zitieren | melden

Hallo,

ich möchte für eine Anwendung prüfen ob diese mit Adminrechten gestartet wurde. - Grund dafür ist, dass ich gewisse Funktionen eingebunden habe, welche Adminrechte fordern. - Als Beispiel das Starten und Stoppen von NT-Diensten.

Mir geht es also nicht darum, ob der angemeldete Benutzer die Berechtigung dazu hat, sondern ob diese der Anwendung gegeben wurden. ("als Administrator starten")

Wie kann ich dies ermitteln?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

Guck dir das mal an

Prüfen ob aktueller Benutzer Administrator ist
private Nachricht | Beiträge des Benutzers
Mr. Bart Simpson
myCSharp.de - Member

Avatar #avatar-3273.gif


Dabei seit:
Beiträge: 502
Herkunft: Mittelfranken

beantworten | zitieren | melden

Das sollte mit etwas wie diesem (ungetesten) Codefragement funktionieren - selbst wenn Du Admin bist aber UAC dazwischen funkt.

if ((new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
{
...
}

Bart Simpson

[Edit]
@pdelvo: ... schnell noch zuvorgekommen...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Mr. Bart Simpson am .
Praxis ist wenn alles funktioniert und keiner weiss warum.
Theorie ist wenn man alles weiss, aber nichts funktioniert.

Bei uns wird Theorie und Praxis vereint: Nichts funktioniert und keiner weiss warum...
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

Themenstarter:

beantworten | zitieren | melden

Danke euch beiden. :) Bringt genau den Effekt den ich erhofft hatte.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo inflames2k,
Zitat
Bringt genau den Effekt den ich erhofft hatte.
in dem konkreten Fall möglicherweise. Im Allgemeinen hat ein Admin allerdings nicht automatisch alle Rechte. Ob die Anwendung als Admin gestartet wurde, sagt also nicht (mit Sicherheit), ob die nötigen Rechte für eine bestimmte Operation bestehen.

Und selbst wenn der Benutzer- bzw. Admin die nötigen Rechte hat, kann es immer noch an den Rechten der Anwendung scheitern; Stichwort: CAS.

herbivore
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

Themenstarter:

beantworten | zitieren | melden

Da hast du natürlich recht. - Werde ich mal mit beleuchten.

Vorerst gab es aber noch keine Rückmeldung, dass es mit der aktuellen Prüfung Probleme gibt. - Trotzdem ist das ein Punkt, der noch mit in betracht gezogen werden sollte.

Muss ich mal schauen, dass ich das ganze mit den Gruppenrichtlinien etc. in Windows noch weiter verfeinern kann und so ermittle ob der Nutzer / die Anwendung die Rechte hat.

Aber alles zu seiner Zeit. - Ich warte ersteinmal die Rückmeldungen ab.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
DNAofDeath
myCSharp.de - Member



Dabei seit:
Beiträge: 165

beantworten | zitieren | melden

Hallo, diese Methode funktioniert nicht immer korrekt, denn sie prüft nicht das Programm, sondern den angemeldeten Benutzer, insofern ist das Thema auch nicht gelöst.

Wenn man das Programm mit Adminrechten startet, ist der Aktuell angemeldete User noch lange kein Admin.

Beispiel:

-->User 'Peter' startet Programm mit Adminrechten
-->Programm prüft nun den angemeldeten User ob er Administrator ist : Nein
-->Programm läuft nicht/fehlerhaft

Ich habe das nämlich gerade als Problem in meiner Anwendung, wenn ich den Snipped von dem Link oben verwende, wird der Block übersprungen, auch wenn das Programm als Administrator ausgeführt wird.

Gibt es eine Möglichkeit das aktuell ausgeführte Programm darauf zu überprüfen ob es mit Administratorrechten gestartet wurde?
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von DNAofDeath am .
Du bist in Ausbildung? Keine Lust Berichte zu schreiben? Besuche meine Seite:
Digitaler Ausbildunsgbericht.Net
private Nachricht | Beiträge des Benutzers
trashkid2000
myCSharp.de - Member



Dabei seit:
Beiträge: 157

beantworten | zitieren | melden

Kann ich so nicht bestätigen.
Wenn ich das hier


WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
Console.WriteLine("Programm wird unter dem Usercontext ausgeführt: {0}", principal.Identity.Name);

Console.WriteLine("Adminrechte vorhanden: {0}", principal.IsInRole(WindowsBuiltInRole.Administrator) ? "Ja" : "Nein");
unter einem Test-User (keine Adminrechte) ausführe, so wird natürlich der Name des Testusers angezeigt und nein für die Adminrechte.
Führe ich das Programm aber unter einem Adminaccount ("Ausführen als..."), so steht dort der Name des Admin und natürlich ja für Adminrechte.
Also wird schon ganz klar geprüft, unter welchem Kontext das Programm ausgeführt wird.

Hast Du mal ein konkretes Beispiel, wo das nicht klappen sollte?
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

ganz allgemein sollte man IMO vorsichtig damit sein, unbedingt den Administrator zu verlangen. Es gibt durchaus Umgebungen, in denen es nur ganz wenige Administratoren gibt, aber weitreichende spezielle Berechtigungen über Benutzer- und Gruppenrechte bzw. -richtlinien an bestimmte Benutzerkonten vergeben sind. Dort ist es dann nicht sinnvoll, auf Administratorrechte zu prüfen, es könnte durchaus sein, dass der Benutzer/das Programm in der Lage ist, die gewünschte Aktion durchzuführen, obwohl er nicht Administrator ist.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

Themenstarter:

beantworten | zitieren | melden

Was schlägst du denn sonst als Alternative vor?

Jedes Recht einzeln prüfen? Oder die Funktion einfach offen lassen und wenns Fehlschlägt nen Fehler zurück geben?

Oder doch was ganz anderes?
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo inflames2k,

schon bei der Installation sollten die Rechte, die das Programm tatsächlich und unausweichlich benötigt, dem ausführenden Benutzer eingeräumt werden. Natürlich darf man dadurch keine Sicherheitslücken aufreißen und jedem Benutzer Rechte auf alles mögliche einräumen. Man sollte z.B. keine Schreibrechte auf das Programmverzeichnis gewähren. Da haben normale Benutzer absichtlich nur Leserechte. In vielen Fällen wird man mit den Rechten auskommen, die der Benutzer bereits hat, z.B. wenn man Konfigurationsdateien nicht im Programmverzeichnis ablegt, sondern an der dafür vorgesehenen Stelle (was automatisch passiert, wenn man [Tutorial] Konfigurationsmodell im .NET Framework benutzt).

herbivore
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

Themenstarter:

beantworten | zitieren | melden

Klar, soweit geh ich ja mit.

Aber selbst wenn der Benutzer das Recht für bestimmte Aktionen nicht hat, sollte das Programm zumindest anlaufen. :-)

In meinem Beispiel war es das Starten und Stoppen von Diensten, was mit der oben genannten Prüfmethode funktionierte.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo inflames2k,

fast alle Rechte sind (von CAS mal abgesehen) benutzer- und nicht programm-bezogen. Insofern musst du dir also die Frage stellen, ob der Benutzer den Dienst starten und stoppen können soll (z.B. über Systemsteuerung/Verwalten/Dienste). Wenn ja, dann gib ihm das Recht, wenn nein, dann kann er es nicht, aber dann kann es das Programm auch nicht. Da muss man sich entscheiden, was wichtiger ist.

herbivore
private Nachricht | Beiträge des Benutzers
SirFoldabit
myCSharp.de - Member



Dabei seit:
Beiträge: 66

beantworten | zitieren | melden

Also wenn ihr wollt, dass Adminrechte zur Verfügung gestellt werden sollen bzw. dass das Programm nur mit Adminrechten läuft, dann kann man das doch ganz einfach über das Manifest machen.

Das ist der Standard (normaler User):
<requestedExecutionLevel level="asInvoker" uiAccess="false" />

So kann die Anwendung nur mit Adminrechten starten:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Einfach im Manifest umändern und natürlich unter Projekt->Eigenschaften->Anwendung->Symbol und Manifest das abgeänderte Manifest auswählen. Neu kompilieren...und fertig.

Dann passiert sowas...
Zitat von DNAofDeath
Beispiel:

-->User 'Peter' startet Programm mit Adminrechten
-->Programm prüft nun den angemeldeten User ob er Administrator ist : Nein
-->Programm läuft nicht/fehlerhaft
...auch nicht mehr.

Die Anwendung kann dann allerdings nur noch als Admin ausgeführt werden und das Ganze funktioniert auch erst ab Windows Vista.
Naja, ich hoffe trotzdem, dass ich weiterhelfen konnte.
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

Themenstarter:

beantworten | zitieren | melden

Hallo SirFoldabit,

das ist doch aber nicht das Thema. Das Thema ist doch das ermitteln der Berechtigungen eines Benutzers.

Es ist ja keinem geholfen, wenn wir den Programmen dann ganz einfach Adminrechte geben.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

Ich hätte auch noch einen kurzen Hinweis für die Prüfung, ob Administrator oder nicht - und soweit ich das bisher gesehen habe arbeitet das zuverlässig - sogar für Webanwendungen (sofern die Rollen benutzen):


var permission = new PrincipalPermission(null,  "Administratoren");
permission.Demand();

Man bekommt sogar eine passende Exception, falls der Benutzer nicht in der Rolle ist (nämlich eine SecurityException) - alles in allem m.E. nach sehr praktisch. (UAC ist damit im übrigen auch kein Problem)
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
private Nachricht | Beiträge des Benutzers