Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dienst soll auf Netzwerkadressen zugreifen (https://www.delphipraxis.net/123355-dienst-soll-auf-netzwerkadressen-zugreifen.html)

xZise 31. Okt 2008 09:58


Dienst soll auf Netzwerkadressen zugreifen
 
Hallo ihr,
ich habe einen Dienst der eine Datei von einem Server laden soll. Also habe ich einfach zuerst ein "FileExists('\\gottfried\Neuer Ordner\Service.exe')" gemacht. Aber er meldet mir immer false. Auch ein CopyFile gibt den ErrCode 0 zurück (kA was das heißt... ich find dazu nichts). Aber wenn ich mich als Administrator anmelde geht alles und zumindest FileExists geht (zweiteres noch nicht getestet). Was muss ich jetzt machen, damit auch der Service daran kommt? Normale Benutzer müssen nämlich ein gültigen Login und ein gültiges Passwort eingeben damit es funktioniert. Deshalb nehme ich an das dem Service diese Frage auch gestellt wird.

MfG
xZise

Luckie 31. Okt 2008 10:13

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Dienste haben keinen Zugriff auf Ordner im Netzwerk, wenn ich mich recht entsinne.

Und was sagt GetLastError nach dem Aufruf von CopyFile?

nahpets 31. Okt 2008 10:33

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Zitat:

Zitat von Luckie
Dienste haben keinen Zugriff auf Ordner im Netzwerk, wenn ich mich recht entsinne.

Doch, sie können, aber sie müssen unter einer Anmeldung laufen, die Zugriff auf die Ordner im Netzwerk hat.
Schlimmstenfalls muss man im Dienst eine Laufwerksverbindung herstellen, das kann auch ohne Vergabe eines Laufwerksbuchstabens sein.
Code:
net use \\meinserver\d$ /user:Domaene\Anmeldename Passwort
stellt eine Laufwerksverbindung ohne Laufwerksbuchstabe her, ein
Code:
dir \\meinserver\d$
ist dann z. B. möglich.
Auch ein Dienst kann dann (sofern er mit der gleichen Anmeldung läuft) auf die Ordner des Servers zugreifen.
Wenn man die Laufwerksverbindung aus dem Dienst heraus erstellt, sollte es möglich sein, einen anderen Benutzer zu verwenden, als den, unter dessen Konto der Dienst läuft.

Alternative wäre: Auf den Servern, auf die der Dienst zugreifen soll, entsprechende Freigaben einzurichten und dem Benutzer, unter dessen Konto der Dienst läuft, die entsprechenden Rechte einzuräumen. Sofern die Freigabe nicht für "Jedermann" zu sehen sein soll, reicht es unter Windows aus, dem Freigabenamen ein $ anzuhängen.

xZise 31. Okt 2008 11:15

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Zitat:

Zitat von Luckie
[...]Und was sagt GetLastError nach dem Aufruf von CopyFile?

5 ;) Also Zugriff verweigert.

Zitat:

Zitat von nahpets
Schlimmstenfalls muss man im Dienst eine Laufwerksverbindung herstellen, das kann auch ohne Vergabe eines Laufwerksbuchstabens sein.
Code:
net use \\meinserver\d$ /user:Domaene\Anmeldename Passwort
stellt eine Laufwerksverbindung ohne Laufwerksbuchstabe her, ein
Code:
dir \\meinserver\d$
ist dann z. B. möglich.
Auch ein Dienst kann dann (sofern er mit der gleichen Anmeldung läuft) auf die Ordner des Servers zugreifen.
Wenn man die Laufwerksverbindung aus dem Dienst heraus erstellt, sollte es möglich sein, einen anderen Benutzer zu verwenden, als den, unter dessen Konto der Dienst läuft.

Muss ich den das "net use" vom Service aus ausführen?

Zitat:

Zitat von nahpets
Alternative wäre: Auf den Servern, auf die der Dienst zugreifen soll, entsprechende Freigaben einzurichten und dem Benutzer, unter dessen Konto der Dienst läuft, die entsprechenden Rechte einzuräumen.

Also das heißt?

Zitat:

Zitat von nahpets
Sofern die Freigabe nicht für "Jedermann" zu sehen sein soll, reicht es unter Windows aus, dem Freigabenamen ein $ anzuhängen.

Dieser Trick ist schon bekannt.

MfG
xZise

Union 31. Okt 2008 11:36

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Du musst den Service-Eintrag für das integrierte Sicherheits-Prinzipal NT AUTHORITY\NetworkService vornehmen sonst besteht kein Netzwerkzugriff für einen Dienst.

nahpets 31. Okt 2008 11:39

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Zitat:

Muss ich den das "net use" vom Service aus ausführen?
Das wäre eine Möglichkeit über ShellExecute dies habe ich aber noch nicht ausprobiert.
Vermutlich kannst Du das aber auch über die Windows-API lösen, da weiß ich aber auch nicht wie das geht, da ich lieber auf Betriebssystemebene für die entsprechenden Rechte sorge.
Eventuell kannst Du dich mit azwa66 zusammentuen.

siehe auch

xZise 3. Nov 2008 12:25

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Wie könnte ich auf Betriebssystemebene die Rechte vergeben?

MfG
xZise

nahpets 3. Nov 2008 13:30

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Hallo,

was für ein Betriebssystem hast Du?

Im Explorer das Verzeichnis auswählen, auf das der Dienst zugreifen soll.
Rechte Maustaste, Eigenschaften, Reiter Sicherheit, den Benutzer, unter dessen Konto der Dienst läuft hinzufügen, mit den passenden Rechten versehen und Übernehmen bzw. Ok.

Sollte bei XP, Windows Server... funktionieren.

xZise 4. Nov 2008 10:41

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Windows 2000 auf Windows XP Prof.

MfG
xZise

nahpets 4. Nov 2008 10:55

Re: Dienst soll auf Netzwerkadressen zugreifen
 
Hallo,

unter Windows 2000, Windows Server 2003 und XP Prof. habe ich, mit der von mir beschriebenen Verfahrensweise, keine Probleme.
Die Dienste laufen mit einer Admin-Anmeldung der Domäne und die Laufwerksverbindungen werden beim Systemstart per Net Use hergestellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz