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);
    }
}
InformationsquelleAutor etoisarobot | 2011-03-16
Schreibe einen Kommentar