Entwickler-Ecke

Windows API - Benutzerrechte als Dienst


Nico B. - Mo 25.01.10 14:13
Titel: Benutzerrechte als Dienst
Hallo Leute,

ich programmiere gerade einen Dienst, der Vollzugriff auf eine Textdatei auf einem Netzlaufwerk haben soll.
Wenn das Netzlaufwerk nicht verbunden ist, soll es vom Dienst verbunden werden.

Was muss ich beim Benutzer beachten über den der Dienst gestartet werden soll.

Momentan habe ich nämlich folgendes Problem:
Variante 1: ServiceStartName=Computername\Benutzer und Passwort=xyz
So läßt sich der Dienst installieren.
Hier funktioniert auch ein erster Zugriff auf die Textdatei (Lesen+Schreiben), wenn das Netzlaufwerk bereits verbunden ist.
Aber der Dienst läßt sich nicht starten. (Fehler 1069: Der Dienst konnte wegen einer fehlerhaften Anmeldung nicht gestartet werden.)

Variante 2: ServiceStartName=Benutzername und Passwort=xyz
So läßt sich der Dienst nicht installieren. (Fehler 1057: Der Kontoname ist unzulässig oder nicht vorhanden, oder das Kennwort ist für den angegebenen Kontonamen ungültig.)
Auch hier (warum auch immer) funktioniert ein erster Zugriff auf die Textdatei (Lesen+Schreiben), wenn das Netzlaufwerk bereits verbunden ist.
Aber der Dienst taucht nicht in der Dienstverwaltung auf und läßt sich somit nicht starten.

Variante 3: ServiceStartName='' und Passwort=''
So läßt sich der Dienst installieren.
Auch hier funktioniert ein erster zugriff auf die Textdatei (Lesen+Schreiben), wenn das Netzlaufwerk bereits verbunden ist.
Aber der Dienst läßt sich nicht starten. (Fehler 1053: Der Dienst antwortete nicht rechtueitig auf die Start- oder Steuerungsanforderung.


Der erste Zugriff auf die Textdatei erfolgt übrigens im ServiceCreate-Ereignis des Dienstes.


Was mache ich falsch?


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 25.01.2010 um 13:36


Narses - Mo 25.01.10 14:37

Moin!

Variante 1 und UNC-Pfade sollten es doch schon tun. :nixweiss: Wozu ein NLW verbinden? :gruebel:

cu
Narses


jaenicke - Mo 25.01.10 14:52

Wichtig ist vor allem, dass aus Sicherheitsgründen standardmäßig (zumindest unter Vista/7) die Netzlaufwerke des Benutzers für den Dienst nicht sichtbar sind. Deshalb wäre es da wenig sinnvoll überhaupt eines zu verwenden wie user profile iconNarses auch bereits geschrieben hat.

Theoretisch lässt sich das zwar umstellen, aber dadurch schafft man sich auch Sicherheitslücken, weswegen dies von MS nicht unterstützt wird (steht auch explizit in der KB dazu).


Nico B. - Di 26.01.10 09:11

Hallo Leute,

na klar UNC-Pfade. Warum bin ich da nicht selbst drauf gekommen?

Leider habe ich aber immer noch ein Problem.
Ich habe den Dienst nun umgebaut, so dass über UNC-Pfade auf die Textdatei zugegriffen werden kann.
Leider funktioniert es immer noch nicht.

Mit Variante 1 läßt sich der Dienst immer noch installieren, aber auch immer noch nicht starten. Selbe Fehlermeldung (1069) wie am Anfang.

Mit Variante 3 (ohne Benutzer) läßt sich der Dienst installieren, aber beim Start erhalte ich die Meldung "Der Dienst "XYZ" auf "Lokales System" wurde gestartet und dann angehalten."

Ich nehme an, dass für Variante 3 Benutzerrechte fehlen und der Dienst deshalb anhält.
Ich verstehe aber nicht, warum Variante 1 nicht funktioniert. Mache ich irgendwas bei der Eingabe des StartServiceName und des Passworts verkehrt?


Nico B. - Di 26.01.10 09:42

Hallo Leute,

ich habe meinen Fehler gefunden.
Ich habe meinen normalen Standardnutzer zum Probieren genommen, der war aber irgendwie nicht als Service-Benutzer vorgesehen. Deshalb hat Variante 1 nicht funktioniert.
Gelöst habe ich das ganze, indem ich im Service-Manager mit der rechten Maustaste auf den Dienst geklickt habe.
Anschließend Eigenschaften geöffnet, den Reiter "Anmelden" gewählt und noch mal manuell das Benutzerkonto samt Passwort angegeben. Daraufhin hat XP automatisch das Benutzerkonto angepasst.

Nun funktioniert´s also soweit.