c# - Windows 服务抛出错误

标签 c# visual-studio-2010 windows-services

我是 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 以从项目文件所在的不同文件夹作为服务安装。但现在它注册正常。但是我无法启动这些 私有(private)无效 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

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

看看这个tutorial .

关于c# - Windows 服务抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087583/

相关文章:

c# - RabbitMQ 消费者恢复

c# - LINQ 设计好奇心 : Skip/Take vs. SkipWhile/TakeWhile

c# - for(或)foreach循环和linq查询在速度的情况下有什么区别

c++ - 在 VS 2010 上临时接受回调

c# - 使用预处理器指令 #if 在 Visual Studio 中调试 WindowsService

java - 通过 android java 检测连接在网络上的计算机

c# - 在 C# (winforms) 中如何同步文本框和 datagridview,以便一个中的更改显示在另一个中

c# - 按回车键自动完成扩展器ajax

c# - 切换到 VS 2012,现在窗体不能正确调整大小?

xml - 使用 VB.net 读取 XML