【问题标题】:windows service throws an errorwindows服务抛出错误
【发布时间】:2011-08-17 03:16:02
【问题描述】:

我是 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_* 方法。当我更改桌面上的文件名时,他们应该记录更改。任何帮助将不胜感激

谢谢

【问题讨论】:

  • 我刚刚写了一个Windows Service,发现添加了'Debugger.Break();'真是天赐之物。该行将调出 VS,以便您对其进行调试。
  • @lian:windows服务可以像普通程序一样调试。

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


【解决方案1】:

您需要首先确保您的服务可以启动。暂时注释掉文件观察程序代码,直到您能够实际启动服务。尝试使用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

【讨论】:

  • @Autolycus:您没有文件观察程序实例。没有人调用这些方法。从您的教程中:第 6 步:在设计模式下打开 service1.cs,然后从 Toolbox 中选择 FileSystemWatcher 控件并将其名称属性设置为 FolderWatcher。第 7 步:转到 FileSystemWatcher 控件的属性,并给出需要监控的文件夹的路径。或者,您可以在项目的 app.config 文件中设置此路径,并在服务的 OnStart 事件中指定此 app.config 路径。 midnightcubicle.wordpress.com/2011/04/25/…
【解决方案2】:

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

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

还可以查看控制面板下的事件查看器以了解任何服务错误。

【讨论】:

  • 我确实在指定目录中有文件。我不确定我能做些什么来触发这些事件
  • 将事件与 filesystemwatcher 组件挂钩的代码在哪里?另外,不仅仅是连接事件,还可以在这里作为参考msdn.microsoft.com/en-us/library/…
【解决方案3】:

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

上运行
  1. 本地系统帐号
  2. 服务帐号

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

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

【讨论】:

  • 但这会导致文件未找到异常吗?
  • 是的,这也可能导致问题。如果帐户没有查看文件的权限,则会出现此错误。
  • 我认为你是对的,因为 onstart 方法没有任何逻辑可供服务执行,而且在启动时本身会抛出错误,我猜 xception 不是由事件引发,而是由系统引发,因为没有允许。让我们看看 OP 怎么说。
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2020-03-12
  • 2016-01-24
相关资源
最近更新 更多