我目前正在开发一个Windows服务,作为我们应用程序的非GUI部分。我编写了一个服务,在调试条件下,完美地工作。这意味着我通过以下方式来进行调试:
static void Main()
{
MyService service = new MyService();
service.OnDebug();
Thread.Sleep(Timeout.Infinite);
}
#if(!DEBUG)
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new TRAservice()
};
ServiceBase.Run(ServicesToRun);
#else
TRAservice Service = new TRAservice();
Service.CanHandlePowerEvent = false;
Service.CanHandleSessionChangeEvent = false;
Service.CanPauseAndContinue = true;
Service.CanShutdown = true;
Service.CanStop = true;
Service.ServiceName = "TRAservice";
Service.AutoLog = false;
Service.SetMethod();
Service.TRAmethod();
#endif
为了进行一些实现测试,我添加了一个ProjectInstaller,并通过VStools命令提示符安装我的服务,使用installutil servicename.exe命令进行安装。 (供参考,我在此帖子底部包含了OnStart的服务构造函数。)
然而,当我尝试启动服务时,我会收到以下错误:
![The error received when starting service error](https://istack.dev59.com/QAszM.webp)
![Error](https://istack.dev59.com/j9oCY.webp)
![Error](https://istack.dev59.com/KQYaT.webp)
我将接受任何解决此问题的建议。先感谢您。
public TRAservice()
{
InitializeComponent();
CanHandlePowerEvent = false;
CanHandleSessionChangeEvent = false;
CanPauseAndContinue = true;
CanShutdown = true;
CanStop = true;
ServiceName = "TRAservice";
AutoLog = false;
sSource = "TRAservice";
sLog = "TRAlog";
if (!EventLog.SourceExists(sSource))
{
EventLog.CreateEventSource(sSource, sLog);
}
eventLog1 = new System.Diagnostics.EventLog();
eventLog1.Source = sSource;
eventLog1.Log = sLog;
eventLog1.WriteEntry("Service started", EventLogEntryType.Information, 1, 100);
scheduleTimer = new Timer();
scheduleTimer.Interval = 10;
scheduleTimer.Elapsed += new ElapsedEventHandler(scheduleTimer_Elapsed);;
}
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("Service started", EventLogEntryType.Information, 1, 100);
flag = true;
sw = true;
lastRun = DateTime.Now;
scheduleTimer.Start();
}
System.ArgumentException: 在本地计算机上源TRAservice已经存在。
然而,即使我从注册表中删除它,这个错误仍然不断弹出。有什么建议吗? - Shishdem