簡體   English   中英

C#中的Windows服務無法啟動

[英]Windows Service in C# Won't Start

我已經使用C#和VS 2012 Express創建了Windows服務。 成功安裝服務后,當我嘗試啟動該服務時,Windows應用程序日志中出現以下錯誤:服務運行時無法更改服務名稱。

我是一位嘗試使用C#的VB6編碼器(因開始使用服務而感到瘋狂)...

您的輸入將不勝感激。

這是我的代碼:

using System;
using System.IO;
using System.ComponentModel;
using System.ServiceProcess;
using System.Configuration.Install;

public class KFolderWatcher : ServiceBase
{
    public const string MyServiceName = "KFolderWatcher";
    private FileSystemWatcher watcher = null;

    public KFolderWatcher()
    {
        this.ServiceName = "KFolderWatcher";
        this.CanStop = true;
        this.CanPauseAndContinue = false;
        this.AutoLog = true;
    }

    protected override void OnStart(string[] args)
    {
        this.ServiceName = MyServiceName;

        // Create a new FileSystemWatcher with the path and jpg file filter
        FileSystemWatcher watcher = new FileSystemWatcher("c:\\scans\\", "*.jpg");

        //Watch for changes in LastAccess and LastWrite times, and the renaming of         files or directories.
        watcher.NotifyFilter = NotifyFilters.LastAccess
                         | NotifyFilters.LastWrite
                         | NotifyFilters.FileName
                         | NotifyFilters.DirectoryName;

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        // Begin watching.
        watcher.EnableRaisingEvents = true;
    }

    protected override void OnStop()
    {
        watcher.EnableRaisingEvents = false;
        watcher.Dispose();

        //LogEvent("Monitoring Stopped");
        Console.WriteLine("Monitoring Stopped");
    }

    void OnRenamed(object sender, RenamedEventArgs e)
    {
        string log = string.Format("{0} | Renamed from {1}", e.FullPath, e.OldName);
        //LogEvent(log);
        Console.WriteLine(log);
    }

    public static void Main()
    {
        ServiceBase.Run(new KFolderWatcher());
    }

    //This method is called when a file is created, changed, or deleted.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        //Show that a file has been created, changed, or deleted.
        WatcherChangeTypes wct = e.ChangeType;
        Console.WriteLine("File {0} {1}", e.FullPath, wct.ToString());
    }

    protected void FileCreated(object sender, FileSystemEventArgs e)
    {
        if (e.ChangeType == WatcherChangeTypes.Created)
        {
            if (Directory.Exists(e.FullPath))
                Console.WriteLine("A new folder has been created.");
            else
                Console.WriteLine("A new file has been created.");
        }
    }

}

[RunInstaller(true)]
public class KFolderWatcherInstaller : Installer
{
    private ServiceProcessInstaller processInstaller;
    private ServiceInstaller serviceInstaller;

    public KFolderWatcherInstaller()
    {
        processInstaller = new ServiceProcessInstaller();
        serviceInstaller = new ServiceInstaller();
        processInstaller.Account = ServiceAccount.LocalSystem;
        processInstaller.Username = null;
        processInstaller.Password = null;
        serviceInstaller.StartType = ServiceStartMode.Manual;
        serviceInstaller.ServiceName = "KFolderWatcher";
        serviceInstaller.DisplayName = "Kempston Folder Watcher";
        serviceInstaller.Description = "Monitor Branch Folder for images to upload.";
        Installers.Add(serviceInstaller);
        Installers.Add(processInstaller);
    }
}

請避免在“服務”類中分配服務名稱。 由於您已經創建了分配服務名稱的安裝程序,因此不需要將其寫入服務中。

serviceInstaller.ServiceName = "KFolderWatcher";

public class KFolderWatcher : ServiceBase
{
    //public const string MyServiceName = "KFolderWatcher";
    private FileSystemWatcher watcher = null;

    public KFolderWatcher()
    {
      //  this.ServiceName = "KFolderWatcher";
        this.CanStop = true;
        this.CanPauseAndContinue = false;
        this.AutoLog = true;
    }

    protected override void OnStart(string[] args)
    {
       // this.ServiceName = MyServiceName;
 .....

this.ServiceName = MyServiceName;

在OnStart()方法中導致此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM