служба windows выдает ошибку - PullRequest
1 голос
/ 17 августа 2011

Я новичок в 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();
        }

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

Update1

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

спасибо

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Сначала необходимо убедиться, что ваша служба может быть запущена. Временно закомментируйте код наблюдателя, пока вы не сможете запустить сервис. Попробуйте переустановить службу 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 в каталоге вашего проекта. Запустите эту команду, чтобы зарегистрировать этот exe-файл в качестве службы Windows:

installutil yourproject.exe

Не должно быть ошибок, и должно быть написано «Фаза фиксации успешно завершена».

Посмотрите на этот учебник .

1 голос
/ 17 августа 2011

При установке служб Windows у вас есть возможность запуска на

  1. локальной системной учетной записи
  2. Сервисной учетной записи

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

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

1 голос
/ 17 августа 2011

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

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

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

...