繁体   English   中英

windows 服务抛出错误

[英]windows service throws an error

我是 C# .net 的新手,我正在尝试获得 windows 服务工作。 我跟着这个教程

http://www.beansoftware.com/NET-Tutorials/Create-Windows-Services.aspx

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.IO;

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

        protected override void OnStart(string[] args)
        {

        }


        protected override void OnStop()
        {
        }
        private void FolderWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true);
            writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been created. ");
            writer.Close();
        }

        private void FolderWatcherTest_Deleted(object sender, System.IO.FileSystemEventArgs e)
        {
            TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true);
            writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been deleted. ");
            writer.Close();
        }

        private void FolderWatcherTest_Renamed(object sender, System.IO.RenamedEventArgs e)
        {
            TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true);
            writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been renamed. ");
            writer.Close();
        }

    }
}

我能够在 windows 服务中注册服务。 但是当我尝试启动它时,它给了我一个错误2:系统找不到指定的文件

我不确定发生了什么。 我也有点困惑这些方法在哪里被调用,因为教程没有提到这些方法

private void FolderWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true);
            writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been created. ");
            writer.Close();
        }

        private void FolderWatcherTest_Deleted(object sender, System.IO.FileSystemEventArgs e)
        {
            TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true);
            writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been deleted. ");
            writer.Close();
        }

        private void FolderWatcherTest_Renamed(object sender, System.IO.RenamedEventArgs e)
        {
            TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true);
            writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been renamed. ");
            writer.Close();
        }

谢谢你的帮助

更新1

好的,我能够注册该服务。 我正在运行 .exe 以从项目文件所在的不同文件夹中作为服务安装。 但现在它注册得很好。 但是我无法启动这些私有 void FolderWatcherTest_* 方法。 当我更改桌面上的文件名时,他们应该记录更改。 任何帮助将不胜感激

谢谢

您需要首先确保您的服务可以启动。 暂时注释掉文件观察程序代码,直到您能够实际启动服务。 尝试使用InstallUtil重新安装 windows 服务。 此实用程序通常位于此处(Windows 7):

c:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe

首先运行此命令,它将卸载服务:

installutil /u yourproject.exe

该服务应该从注册服务列表中消失。 如果这不起作用,您可以使用sc delete命令执行相同操作。 删除服务后,找到您的 exe 所在的位置。 它通常位于项目目录下的\bin\Debug\yourproject.exe\bin\Release\yourproject.exe文件夹中。 运行以下命令将此 exe 注册为 windows 服务:

installutil yourproject.exe

应该没有错误,并且应该显示“提交阶段已成功完成”。

看看这个教程

Onstart 方法应该有一些逻辑来触发您通过 FileSystemWatcher 订阅的这些事件。

您是否首先在指定的驱动器/目录中有那些 txt 文件?

另请参阅控制面板下的事件查看器以了解任何服务错误。

当您安装 windows 服务时,您可以选择在

  1. 本地系统帐户
  2. 服务帐号

如果您在服务帐户上运行,则需要向该文件夹上的服务帐户授予权限。

请检查您正在运行的帐户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM