Berechtigung für Dienst unter lokalem Administratorkonto verweigert

1646
PedroC88

Ich habe einen Dienst, der einige Dateien über ein Netzwerk kopieren soll. Der Dienst wird unter einem der lokalen Administratorkonten ausgeführt.

Als dieser Administrator Program Filesangemeldet kann ich die Dateien manuell aus dem Netzwerk in einen bestimmten Ordner unter kopieren, der Dienst existiert jedoch mit einer PermissionDenied-Ausnahme, um die Datei zu SCHREIBEN. Ich bin auch sicher, dass die Dateien vor dem Schreiben nicht gesperrt werden.

Der Fehler lautet wie folgt:

Zugriff auf den Pfad "... / SomeAssembly.dll" wird verweigert.

Warum gibt der Dienst einen solchen Fehler an und wie kann ich ihn beheben? (Ich habe auch den Dienst entwickelt, daher könnten Änderungen an der Baugruppe auf dem Tisch liegen).


Aktualisieren

Ich habe auch versucht, es unter fließendem, Systemaber es kann die Dateien auf dem Netzwerk nicht lesen (Keine Ahnung warum) die LocalServiceund NetworkServiceKonten AFAIK nicht genug Privilegien Änderungen Programfiles machen ... tun sie?


Update 2

Der Grund, warum ich nicht verwenden kann, Systemliegt darin, dass dieses Konto vom Design her keinen Zugriff auf Netzwerkressourcen NETWORK SERVICEhat. Dies gilt auch für den Zugriff auf lokale Ressourcen. Das Problem mit dem Administratorkonto scheint zu sein, dass Windows den Dateikopiervorgang blockiert, wenn er vom Dienst ausgeführt wird.

Irgendwelche Ideen????

5

3 Antworten auf die Frage

1
Kit Ramos

Zunächst würde ich prüfen, ob eine der Dateien als "schreibgeschützt" markiert ist, da dieses Attribut manchmal NTFS-Berechtigungen ersetzt. Ich habe Fälle gesehen, in denen Sie die Datei in der GUI kopieren können, nachdem Sie auf "Ja, sind Sie?" Geklickt haben, aber alle Versuche, ein Programm zum Schreiben von Daten zu verwenden, schlagen sofort fehl, keine Eingabeaufforderung.

Ich würde auch sicherstellen, dass der Dienst und die zugehörigen Dienste tatsächlich unter dem Konto ausgeführt werden, von dem Sie meinen, dass sie es sind. Ich habe Fälle gesehen, in denen ein Dienst A den Dienst B anruft, um eine Aufgabe auszuführen, und die Ergebnisse dann an Dienst A zurückgibt, um die Aufgabe abzuschließen. Wenn nur Service An das Konto mit den richtigen Berechtigungen verwendet, schlägt der Versuch fehl (da An zwar B anruft, erzwingt es jedoch nicht, dass es als derselbe Benutzer An ausgeführt wird, wenn B nicht selbst konfiguriert ist Verwenden Sie den richtigen Benutzer. Es wird der Standardbenutzer verwendet, der möglicherweise keinen Zugriff auf die gewünschte Stelle hat.

Stellen Sie außerdem sicher, dass der Pfad, den Sie als Pfad verwenden möchten, c:\program files\SomeAssembly.dll\somefile.txtoder ähnliches C:/users/don/app/SomeAssembly.dllFehler enthalten kann.

0
PedroC88

At the end what I did was have the application copy the files from the remote resource to a low-restriction folder (Application Data if I recall correctly) and then invoke the service, running under System, to copy them to Program Files.

The advantage for this approach is that it doesn't need administrative rights to copy the files over the network to the local drive (as long as you have the right read permissions on the network files of course) and then it also takes advantage on the low restrictions imposed to System to write to Program Files.

-1
surfasb

Je nachdem, was auf dem anderen Computer ausgeführt wird, werden Dienste im Allgemeinen unter dem Konto "Netzwerkdienste" oder "Lokales System" ausgeführt.

Ich würde das zuerst versuchen.

Ich denke, Sie nehmen den Dienst oder etwas anderes um? avirk vor 12 Jahren 0
Sie können jederzeit das Konto konfigurieren, unter dem der Dienst ausgeführt wird. Meiner steht nicht unter keinem dieser beiden zur Verfügung, sondern unter einem von mir erstellten Administratorkonto. Ich bin sicher, dass er über ausreichende Berechtigungen zum Ausführen der Aufgaben verfügt. PedroC88 vor 12 Jahren 0