[英]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.