2011-08-17 5 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(); 
     } 

    } 
} 

을 따랐다. 하지만 시작하려고하면 오류가 발생합니다. 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(); 
     } 

감사를 어떤 기준을 didnt는 이러한 방법이 호출되는 곳 또한 나는 좀 혼란 스러워요

갱신 1

나는를 등록 할 수 있었다 확인 서비스. .exe를 실행하여 다른 폴더에서 서비스로 설치해야하는 이유가 프로젝트 파일이었습니다. 하지만 지금은 괜찮아요. 그러나 나는이 private void FolderWatcherTest_ * 메소드를 실행할 수 없습니다. 그들은 바탕 화면에서 파일 이름을 변경할 때 변경 사항을 기록해야합니다. 어떤 도움은 ONSTART 방법은 당신은 FileSystemWatcher를 통해 가입 한 이러한 이벤트를 트리거하기 위해 몇 가지 논리가 있어야

감사

+0

방금 ​​Windows 서비스를 작성하고 'Debugger.Break();' 신의 선물 이었어. 이 줄은 VS를 불러올 것이므로 디버깅 할 수 있습니다. – Iain

+0

@lian : Windows 서비스는 일반 프로그램처럼 디버깅 할 수 있습니다. –

답변

2

먼저 서비스를 시작할 수 있어야합니다. 실제로 서비스를 시작할 수있을 때까지 파일 감시자 코드를 일시적으로 주석 처리하십시오. InstallUtil으로 Windows 서비스를 다시 설치해보십시오. 일반적으로 다음 위치에이 유틸리티 (윈도우 7) :

installutil /u yourproject.exe 

이 서비스는 등록 된 서비스의 목록에서 사라집니다 :이 명령은 먼저

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

실행, 그것은 서비스를 제거합니다. 이것이 작동하지 않으면 sc delete 명령을 사용하여 동일한 작업을 수행 할 수 있습니다. 서비스를 제거한 후 exe가있는 위치를 찾으십시오. 대개 프로젝트 디렉토리 아래의 \bin\Debug\yourproject.exe 또는 \bin\Release\yourproject.exe 폴더에 있습니다. 이 exe를 Windows 서비스로 등록하려면 다음 명령을 실행하십시오.

installutil yourproject.exe 

오류가 없어야하며 "완료 단계가 완료되었습니다."

이것을보십시오. tutorial.

+0

질문에 update1을 보시기 바랍니다 – Autolycus

+0

@Autolycus : 파일 감시자 인스턴스가 없습니다. 아무도이 방법들을 부르고 있지 않습니다. 자습서에서 : 6 단계 : 디자인 모드에서 service1.cs를 열고 Toolbox에서 FileSystemWatcher 컨트롤을 선택하고 Name 속성을 FolderWatcher로 설정합니다. 7 단계 : FileSystemWatcher 컨트롤의 속성으로 이동하여 모니터해야하는 폴더의 경로를 지정합니다. 또는 프로젝트의 app.config 파일에서이 경로를 설정하고 서비스의 OnStart 이벤트에서이 app.config 경로를 지정할 수 있습니다. http://midnightcubicle.wordpress.com/2011/04/25/creating-windows-service-in-c/ – Dmitry

1

을 이해할 수있을 것이다.

먼저 지정한 드라이브/디렉토리에 해당 txt 파일이 있습니까?

서비스 오류에 대해서는 제어판 아래의 eventviewer를 참조하십시오.

+0

질문에서 update1을 보시기 바랍니다 – Autolycus

+0

지정된 디렉토리에 파일이 있습니다. 이벤트를 시작하기 위해 내가 무엇을 할 수 있는지 확신 할 수 없다. – 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

관련 문제