У меня есть служба Windows, которая отслеживает папку для новых файлов и запускает процесс. Однако служба падает каждый раз, когда я помещаю файлы в контролируемую папку. Вот исключение, которое я получаю:
Приложение: Framework Версия: v4.0.30319 Описание: Процесс
было прекращено из-за необработанного исключения. Информация об исключении:
Стек исключений System.IO.IOException: в System.IO ._ Error.WinIOError (Int32,
System.String) в System.IO. _Error.WinIOError () в
System.IO.File.Move (System.String, System.String) в
Service.Service.Process (System.String, System.String) в
Service.Service.OnChanged (System.Object,
System.IO.FileSystemEventArgs) в
System.IO.FileSystemWatcher.OnCreated (System.IO.FileSystemEventArgs)
в System.IO.FileSystemWatcher.NotifyFileSystemEventArgs (Int32,
System.String) в
System.IO.FileSystemWatcher.CompletionStatusChanged (UInt32, UInt32,
System.Threading.NativeOverlapped *) в
System.Threading._IOCompletionCallback.PerformIOCompletionCallback (UInt32,
UInt32, System.Threading.NativeOverlapped *)
Все работало нормально, а потом внезапно зависает каждый раз, когда я его использую. Я не помню, чтобы что-нибудь изменилось Вот мой код:
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
FileSystemWatcher watcher = new FileSystemWatcher(ConfigurationManager.AppSettings["UploadPath"]);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
public static void OnChanged(object source, FileSystemEventArgs e)
{
Process(e.Name, e.FullPath);
}
public static void Process(string fileName, string path)
{
string newPath = Path.Combine(ConfigurationManager.AppSettings["NewPath"], fileName);
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = @"C:\Program Files\Microsoft Security Client\Antimalware\mpcmdrun";
process.StartInfo.Arguments = " -scan -scantype 3 -file L:\\Test\\";
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
if (process.ExitCode == 0)
{
File.Move(path, cleanPath);
}
else
{
TextWriter tw = new StreamWriter(ConfigurationManager.AppSettings["FailedPath"] + fileName + ".txt");
tw.WriteLine(output);
tw.Close();
File.Delete(path);
}
}
protected override void OnStop()
{
}