我一直在读这篇文章,我开始失去我留下的少数弹珠......
我试图在监视电子表格更新的服务器上运行服务,该电子表格将通过UNC保存到它。 \ server01 \ mon(例如)
现在,服务正常,如果显示器和保存文件的机器是同一台机器,例如,如果我使用服务器将文件复制到文件夹,它就可以工作,如果我在我的电脑上运行服务并监控UNC并将文件复制到我的PC上的UNC,它可以工作..但是如果你从PC更新文件,那就不行了。服务器(或其他方式),我已将服务设置为可以访问所有内容的管理帐户(实际上当前,作为我)
理想情况下,我的服务监控其本地路径,PC将通过UNC写入..但如果我必须监控UNC,那就是那个。但是atm,我似乎无法识别另一个更新的。
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
namespace watchtest
{
public partial class Service1 : ServiceBase
{
private FileSystemWatcher fsw = null;
private EventLog log;
private String path = @"c:\temp";
public Service1()
{
InitializeComponent();
((ISupportInitialize)this.EventLog).BeginInit();
if (!EventLog.SourceExists(this.ServiceName))
{
EventLog.CreateEventSource(this.ServiceName, "Application");
}
((ISupportInitialize)this.EventLog).EndInit();
this.EventLog.Source = this.ServiceName;
this.EventLog.Log = "Application";
log = this.EventLog;
}
protected override void OnStart(string[] args)
{
this.EventLog.WriteEntry($"Monitoring {path}", EventLogEntryType.Information);
fsw = new FileSystemWatcher(path);
fsw.Filter = "*.xlsx";
fsw.Changed += new FileSystemEventHandler(f_Changed);
fsw.Created += new FileSystemEventHandler(f_Changed);
fsw.EnableRaisingEvents = true;
}
private void f_Changed(object sender, FileSystemEventArgs e)
{
this.EventLog.WriteEntry($"Changed {e.Name}", EventLogEntryType.Information);
}
protected override void OnStop()
{
}
}
}
答案 0 :(得分:0)
好的
原来我不像我想的那样愚蠢,但是
将项目从outlook保存到本地PC时,它只保存到c:\ temp \ filename.xls
当保存到UNC时,它会这样做(即使你只说xlsx监视器,也会出现tmp文件!!)
Created: 1A50796C.tmp
Changed: 1A50796C.tmp
Changed: 1A50796C.tmp
Renamed: 4203327D.tmp
Renamed: filename.xlsx
Deleted: 4203327D.tmp
所以......
简而言之,我必须添加一个检查文件扩展名是.xlsx并监听重命名..以便它可以在所有的senarios中使用。