I’m creating a Windows Service Application in Visual Studio 2010 Ultimate SP1.
I was following ‘How to’ from MSDN:
http://msdn.microsoft.com/en-us/library/7a50syb3.aspx
I have encountered two problems:
-
I cannot start a service via Server Explorer – my service is listed there, but in the context menu I have only two options available: Refresh and Properties. There is no “Start” though MSDN documentation says that there should be that option.
Fortunately, I can avoid this hassle by using Services Control Manager. -
The next step is: “In Visual Studio, choose Processes from the Debug menu”.
That option doesn’t exist in Debug menu. I have only “Attach to Process”, but services aren’t listed there.
Does somebody know what is wrong and how I am supposed to debug my application?
Thank you in advance.
As a thought: I have built a lot of Windows services and for one of many reasons, I do not create the core code in the service itself. The service is essentially the “operational layer”, if you will. Creating the core code in a dll permits debugging and testing of that particular code. You can create a console or desktop app that will run the core code which can be used during development and testing phases.
Personally, I created a service runner application which captures logging in conjunction with the start and stop functionality. My OnStart and OnStop code blocks are literally identical to that of the service.
Next, when you test the service, you should be able to start the service (e.g. myService.exe) and attach to process. However, another note is that you should pause/wait the service thread (for say 30 seconds) with a debug build so you have time to attach to the process and you don’t miss your initialization code. Just remember, you have to install your service then start via the Windows service manager.
Here is some code you that might point you in the direction that I use. In the service program.cs file I use the below; then in the Service OnStart() method you call your dll and run. Also, you can stop your service, replace the dll with an updated version then restart. With C# you can replace the service exe as well, but these are only C# characteristics: in C++ you cannot.