2011-08-17 2 views
1

Я новичок в C# .net, и я пытаюсь получить работу службы Windows. Я следовал этому руководствуwindows service throws the error

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

Спасибо за вашу помощь

Update1

хорошо, я был в состоянии зарегистрировать оказание услуг. Я запускал .exe для установки в качестве службы из другой папки, где были созданы файлы проекта. Но теперь он регистрируется в порядке. Однако я не могу запустить эти методыprivate void FolderWatcherTest_ *. Они должны регистрировать изменения, когда я изменяю имя файла на рабочем столе. Любая помощь будет оценена

благодаря

+0

Я только что написал службу Windows и обнаружил, что добавление 'Debugger.Break();' был находкой. Эта строка вызовет VS, чтобы вы могли ее отладить. – Iain

+0

@lian: Службу Windows можно отлаживать так же, как и обычную программу. –

ответ

2

Необходимо сначала убедиться, что услуга может начаться. Прокомментируйте код наблюдателя с файлом временно, пока вы не сможете фактически запустить службу. Попробуйте повторно установить службу Windows с помощью InstallUtil. Эта утилита обычно находится здесь (Windows 7):

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

Выполнить эту команду первой, она будет удалить услугу:

installutil /u yourproject.exe 

Служба должна исчезнуть из списка зарегистрированных услуг. Если это не сработает, вы можете использовать команду sc delete, чтобы сделать то же самое. После того, как вы удалили службу, найдите, где вы находитесь. Он обычно находится в папках \bin\Debug\yourproject.exe или \bin\Release\yourproject.exe под вашим каталогом проектов. Выполните эту команду, чтобы зарегистрировать этот ехе, как сервис Windows: «Фаза фиксации успешно завершена»

installutil yourproject.exe 

Там не должно быть никаких ошибок, и он должен сказать,

Посмотрите на это tutorial.

+0

, пожалуйста, посмотрите на update1 в вопросе – Autolycus

+0

@Autolycus: у вас нет экземпляра наблюдателя файлов. Никто не называет эти методы. Из учебника: Шаг 6: Откройте service1.cs в режиме разработки, а с панели инструментов выберите элемент управления FileSystemWatcher и установите его свойство name в FolderWatcher. Шаг 7. Перейдите в свойства элемента управления FileSystemWatcher и укажите путь к папке, которая должна быть установлена. Или вы можете установить этот путь в файле app.config вашего проекта и указать этот путь app.config в событии OnStart вашей службы. http://midnightcubicle.wordpress.com/2011/04/25/creating-windows-service-in-c/ – Dmitry

1

OnStart метод должен иметь определенную логику, чтобы вызвать эти события, которые вы подписались через FileSystemWatcher.

У вас есть эти файлы txt в указанном каталоге диска /?

Также см. Eventviewer под панелью управления для любых служебных ошибок.

+0

, пожалуйста, посмотрите на update1 в вопросе – Autolycus

+0

У меня есть файлы в указанной директории. Я не уверен, что я могу сделать для запуска событий. – Autolycus

+0

Где код, в котором вы подключаете события с компонентом filesystemwatcher? Кроме того, не просто подключить событие, посмотрите также ссылку http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx – Zenwalker

1

При установке окон услуги, имеют возможность работы в локальной системной учетной записи

  1. счет Услуги

Если вы работаете на учетной записи службы вы должны дать разрешение на учетную запись службы в этой папке.

Пожалуйста, проверьте учетную запись, на которой вы работаете.

+0

Но не вызывает ли это нарушение файла? – Zenwalker

+0

да это также может вызвать проблему. Если у учетной записи нет разрешения на просмотр файла, она даст эту ошибку. –

+0

Я думаю, что ваше право, так как метод onstart не имеет никакой логики для службы, а плюс при запуске сам по себе бросает ошибку, я думаю, что xception выбрасывается не событиями, а системой для отсутствия разрешения. Посмотрим, что должен сказать OP. – Zenwalker