Windows服务未按预期工作 - C#

时间:2017-05-22 09:49:50

标签: c# .net service windows-services file-watcher

我使用FileWatcher类构建了一个Windows服务。它必须检测文件夹中的传入文件并将它们移动到新位置。

我的代码作为控制台应用程序正常运行但不能用作Windows服务。文件仅保留在Source文件夹中。他们没有移动到目的地。我已经完全访问了在LOCAL SYSTEM帐户中运行的文件夹和服务。你能指出错误吗?提前谢谢。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            bulk_watch();
        }

        public static void bulk_watch()
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = @"C:\Users\ADMIN\Downloads\FW_Source";            
            watcher.NotifyFilter = NotifyFilters.LastWrite;     
            watcher.Filter = "*.*";                              
            watcher.Changed += new FileSystemEventHandler(OnChanged); 
            watcher.EnableRaisingEvents = true;

        }

        public static void OnChanged(object sender, FileSystemEventArgs e)
        {


            DirectoryInfo directory = new DirectoryInfo(@"C:\Users\IBM_ADMIN\Downloads\FW_Source");
            FileInfo[] files = directory.GetFiles("*.*");
            foreach (var f in files)
            {

               File.Move(f.FullName, System.IO.Path.Combine(@"C:\Users\ADMIN\Downloads\FW_Dest", Path.GetFileName(f.FullName)));

            }

        }

        protected override void OnStop()
        {



        }
    }
}

2 个答案:

答案 0 :(得分:0)

默认情况下,Windows服务在LocalSystem帐户下运行(除非您在安装时指定其他帐户)。您需要授予此帐户两个文件夹的访问权限。

答案 1 :(得分:0)

使用以下命令使用用户名和密码创建服务:

<div class="ui-g">
    <p-dataTable class="ui-g-4">
        Columns...
    <p-dataTable>
    <svg class="ui-g-8"> 
        Visualistion...
    </svg>
</div>

Repace: ServiceName,exe文件位置,DisplayName,用户名和密码。