我想在Windows Server 2008服务器上运行Windows服务,该服务器将监视本地服务器上的目录(即C:\ Watch),并且在该目录中创建新的pdf时,将文件复制到网络共享(即//192.168.1.2/Share)。
这两个服务器都不是域的成员。
Windows服务将其设置为本地用户帐户,该帐户可以访问// server / share并创建和删除文件。
如果sourceDir和destDir是C:\ Source和C:\ Dest之类的本地文件夹但是如果我将destDir更改为// server / share /或///这样的网络位置,我有以下工作正常/ server // share //我收到错误“T文件名,目录名或卷标语法不正确”。
更新 我不再得到上面的错误,现在当我将sourceDir设置为C:\ Watch并将destDir设置为\ server \ share \(其中服务器可以是Windows或Ubuntu服务器时,我收到System.UnauthorizedAccess错误,我假设是来自目标服务器。如何设置连接到目标服务器时使用的凭据。请记住,服务器不在域中,可以是Windows或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);
}
}
答案 0 :(得分:4)
服务器共享将是:
string networkShare = @"\\ServerName\Share\";
另请注意,服务正在执行的身份将影响服务是否能够保存到该位置。如果您使用域服务帐户运行该服务,请确保从共享所在的计算机上调整目标共享文件夹上的ACL以允许写入
答案 1 :(得分:1)
基于Oded的回答here 一旦我以远程Ubuntu服务器上也设置的本地用户运行服务,一切都像魅力一样。