So Kopieren Sie eine Datei, um den Speicherort im Netzwerk aus Windows-Dienst?
Ich will einen Windows-Dienst läuft auf einem Windows Server 2008-server, der überwacht ein Verzeichnis auf dem lokalen server (zB. C:\Watch) und wenn eine neue pdf-Datei wird in diesem Verzeichnis erstellt werden, kopieren Sie die Datei über das Netzwerk teilen (dh. //192.168.1.2/Aktie).
Weder der server sind Mitglieder einer Domäne.
Den Windows-Dienst hat es anmelden, wie auf ein lokales Benutzerkonto Zugriff auf die //server/Freigabe und erstellen und löschen von Dateien kein prob.
Habe ich das folgende, das funktioniert gut, wenn die sourceDir und den destDir sind lokale Ordner, z.B. C:\Source und C:\Dest aber wenn ich ändern Sie das Speicherziel an einem Netzwerk-Speicherort wie //server/share/oder ////server//Freigabe//ich bekomme die Fehlermeldung "Der Dateiname, Verzeichnisname oder Datenträgerbezeichnung ist falsch".
Update:
Ich bin nicht mehr immer den oben genannten Fehler und jetzt wenn ich das sourceDir eingestellt C:\Watch und das destDir auf \server\Freigabe\ (wo der server kann ein Windows-oder Ubuntu-Server bekomme ich eine System.UnauthorizedAccess Fehler, die ich nehme an, dass kommt vom Ziel-server. Wie kann ich die Anmeldeinformationen verwenden, wenn eine Verbindung zum Ziel-Server. Denken Sie daran das die Server nicht in einer Domäne und kann von windows oder Ubuntu.
public partial class Service1 : ServiceBase
{
private FileSystemWatcher watcher;
private string sourceFolder;
private string destFolder;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.sourceFolder = Properties.Settings.Default.sourceDir;
this.destFolder = Properties.Settings.Default.destDir;
watcher = new FileSystemWatcher();
watcher.Path = this.sourceFolder;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.pdf";
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.EnableRaisingEvents = true;
}
protected override void OnStop()
{
}
private void watcher_Created(object source, FileSystemEventArgs e)
{
FileInfo fInfo = new FileInfo(e.FullPath);
while (IsFileLocked(fInfo))
{
Thread.Sleep(500);
}
System.IO.File.Copy(e.FullPath, this.destFolder + e.Name);
System.IO.File.Delete(e.FullPath);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den server teilen würde:
Halten Sie auch im Verstand, der Identität der Dienst ausgeführt wird Einfluss darauf haben, ob der Dienst wird in der Lage sein zu speichern, die Lage. Wenn Sie einen domain-service-Konto für den Dienst ausgeführt werden soll, stellen Sie sicher, passen Sie die ACL ' s auf der Ziel-Freigabe-Ordner von der Maschine, dass die Aktie zu ermöglichen, schreibt
Basierend auf Oded Antwort hier
Einmal lief ich den Dienst als lokaler Benutzer, der kam auch auf dem remote-server von Ubuntu funktioniert alles wie ein Charme.