Windows-Dienst nicht kopieren kann auf Dateifreigabe
-
21-08-2019 - |
Frage
Ich habe einen Windows-Dienst eingestellt Dateien von einem lokalen Verzeichnis auf eine Samba-Freigabe kopieren.
Der Dienst ist über einen UNC-Pfad zu dem Server (d \ Remote \ SharedDir).
Ich habe als der Benutzer, unter dem eingeloggte der Dienst ausgeführt wird, und konnte beide Kopieren von Dateien und erstellen Sie Dateien auf dem Samba-Freigabe, den UNC-Pfad verwendet wird.
Wenn jedoch der Dienst läuft Ich erhalte io Ausnahmen, die einen Login-Fehler vor. Ich habe auf diesem Feld Prozessmonitor laufen, den Dienst zu beobachten, und ich kann sehen, daß es den UNC-Pfad zu finden, aber ein Login-Fehler, wenn ich versuche auf die Freigabe zu schreiben.
Dies ist plain vanilla .net System.IO.File.Copy Anruf mit.
Ich verstehe nicht, die Fehler, wie wenn sie unter demselben Benutzer angemeldet ich in der Lage bin zu kopieren und erstellen Sie Dateien auf der Freigabe.
Irgendwelche Ideen?
Edit: Exception Text
Fehler in Hauptverarbeitungsschleife (DoWork ()): Anmeldung fehlgeschlagen: unbekannt Benutzername oder falsches Passwort.
System.Exception: Fehler auf MyService.ProcessExportTransferfileDirectories und Werte: D: \ Export, \ Remote \ Einschub, D: \ Export \ Archiv ---> System.IO.IOException: Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort.
an System.IO .__ Error.WinIOError (Int32 errorcode, String maybeFullPath) an System.IO .__ Error.WinIOError () bei System.IO.File.Move (String source, String Destfilename)
beim MyService.Consumer.BusinessLogic.WmsFacade.MoveAndArchiveFile (String source, String target, String Archivordner, String rootFolder, LogCategory logCategory, LogCounter logCounter) --- Ende der Ausnahmestapelüberwachung --- at MyService.Consumer.BusinessLogic.WmsFacade.MoveAndArchiveFile (String source, String target, String Archivordner, String rootFolder, LogCategory logCategory, LogCounter logCounter) bei MyService.Consumer.BusinessLogic.WmsFacade.ProcessExportTransfer (IDictionary`2 fileDirectories) bei MyService.Core.TimedWorkerProvider.DoWork ()
Lösung
Es endete ein Berechtigungsproblem zu sein. - Nach dem Dienst als einen anderen Benutzer ausgeführt wird, dass das Setup auf der Samba-Freigabe war es ohne Probleme lief, das Kopieren von Dateien über
Immer noch nicht verstehen, warum, wenn ein anderes Konto verwenden könnte ich kopieren / erstellen Dateien auf der Freigabe mit dem Windows Explorer, aber wenn der Dienst unter demselben Konto ausgeführt konnte es nicht, den Anteil an alle Zugang: (
Andere Tipps
würde ich empfehlen, zunächst eine Laufwerkszuordnung und dann tun Sie die Datei kopieren auf dem zugeordneten Laufwerk anstelle der Aktie.
Sie können ein Laufwerk des DOS-Befehl net use verwenden. Zum Beispiel:
System.Diagnostics.Process.Start("net", "use h: \remoteserver\shareddir /User:domian\me password")
Dies sollte die Anmeldung Probleme lösen.
Ein sehr hilfreiches Werkzeug in Ihrer Situation ist Prozessmonitor . führen Sie es einfach als Administrator an und fügen Sie die folgenden Filter:
Process Name is "your_process.exe" AND Operation is "CreateFile"
In Kürze erhalten Sie detaillierte Informationen zu den Dateien finden Sie in Prozess zu verwenden versucht.
Wie bereits erwähnt, wenn ich mit der Login möglich gleiches Konto, dass der Service ist läuft wie, ich habe keine Probleme beim Kopieren zu und Dateien auf der Freigabe zu schaffen. - Oded vor 1 Min
Haben gewähren Sie das Benutzerkonto der Dienste laufen „Als Dienst anmelden“ Berechtigungen in der lokalen Sicherheitsrichtlinie ??