C#中的Windows服务无法启动

我已经使用C#&VS 2012 Express创build了一个Windows服务。 成功安装服务后,当我尝试启动它,我在Windows应用程序日志中出现以下错误:服务运行时不能更改服务名称。

我是一个VB6编码器试图在C#(我叫服务开始疯狂…)

您input将不胜感激。

这是我的代码:

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

该线

 this.ServiceName = MyServiceName; 

在OnStart()方法中导致问题。

请避免在Service类中分配服务名称。 由于您已经创建了一个分配服务名称的安装程序,因此无需将其写入服务中。

 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; .....