2011-08-17 137 views
1

我是C#.net中的新手,我试图获得Windows服务工作。我跟着这个教程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:系统找不到指定的文件

我不确定发生了什么。此外,我有点糊涂了,其中被称为这些方法的教程didnt作出任何引用这些方法

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(); 
     } 

感谢您的帮助

UPDATE1

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

感谢

+0

我刚写了一个Windows服务,发现添加'Debugger.Break();'是天赐之物。这条线会带来VS,所以你可以调试它。 – Iain

+0

@lian:可以像常规程序一样调试windows服务。 –

回答

2

您需要首先确保您的服务可以启动。暂时留下文件观察程序代码,直到您能够实际启动服务。尝试重新安装与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

+0

请看问题 – Autolycus

+0

@Autolycus更新1:你没有文件观察器实例。没有人称这些方法。从您的教程中:第6步:在设计模式下打开service1.cs,并从Toolbox中选择FileSystemWatcher控件,并将其名称属性设置为FolderWatcher。第7步:转到FileSystemWatcher控件的属性,并给出需要监听的文件夹的路径。或者,您可以在项目的app.config文件中设置此路径,并在您的服务的OnStart事件中指定此app.config路径。 http://midnightcubicle.wordpress.com/2011/04/25/creating-windows-service-in-c/ – Dmitry

1

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

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

另请参阅控制面板下的eventviewer以了解任何服务错误。

+0

请查看 – Autolycus

+0

问题中的更新1我确实有指定目录中的文件。我不知道我能做些什么来激发事件 – Autolycus

+0

你在哪里使用filesystemwatcher组件连接事件的代码在哪里?另外不只是连接事件,也看这里作为参考http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx – Zenwalker

1

当你安装你有一个

  1. 本地系统帐户运行的选项窗口服务
  2. 服务帐户

如果你在你需要给服务帐户运行该文件夹上服务帐户的权限。

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

+0

但这是否导致文件未找到xception? – Zenwalker

+0

是的,这也可能会导致问题。如果该帐户没有权限查看该文件它会给这个错误。 –

+0

我认为你的权利,因为onstart方法没有任何逻辑的服务做,并加上在启动本身其抛出错误,我猜这个xception不是由事件抛出,而是由系统没有权限抛出。让我们看看OP有什么话要说。 – Zenwalker

相关问题