Debug Windows Service
Scenario
I've got a windows service written in C#. I've read all the google threads on how to debug it, but I still can't get it to work. I've run "PathTo.NetFramework\InstallUtil.exe C:\MyService.exe". It said the install was successful, however when I run "Services.msc", The service isn't displayed at all, anywhere. If I go into Task Manager, there is a process called "MyService.vshost.exe". Pretty sure that's not it, because it's a service, not a process.
Can Someone Explain To Me?
If I am supposed to see the service when I run Services.msc? (Bearing in mind this is all being done on a local machine, with no servers AT ALL.
Other
I'm running VS2008.
EDIT:
This is all being done on my local machine, I have no servers or access to any. Also, I don't even know what the service does, I want to debug it so I can walkthrough the code and see how it all works (the code inside the service, not the service itself - for any of you smarty pants that might suggest I look at a template).
EDIT 2:
NONE OF THESE ARE WORKING! Everytime I try something I get some message about having to use NET START or install the service.
EDIT 3:
I'm running VS2008.
I typed this: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\dev\Restarter\bin\Release\Restarter.exe
I got this: Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053 Copyright (c) Microsoft Corporation. All rights reserved.
Running a transacted installation.
Beginning the Install phase of the installation. See the contents of the log file for the C:\dev\Restarter\bin\ Release\Restarter.exe assembly's progress. The file is located at C:\dev\Restarter\bin\Release\EDT.Restar ter.InstallLog. Installing assembly 'C:\dev\Restarter\bin\Release\Restarter.exe'. Affected parameters are: logtoconsole = assemblypath = C:\dev\Restarter\bin\Release\Restarter.exe logfile = C:\dev\Restarter\bin\Release\Restarter.InstallLog
The Install phase completed successfully, and the Commit phase is beginning. See the contents of the log file for the C:\dev\Restarter\bin\ Release\Restarter.exe assembly's progress. The file is located at C:\dev\Restarter\bin\Release\Restar ter.InstallLog. Committing assembly 'C:\dev\Restarter\bin\Release\Restarter.exe'. Affected parameters are: logtoconsole = assemblypath = C:\dev\Restarter\bin\Release\Restarter.exe logfile = C:\dev\Restarter\bin\Release\Restarter.InstallLog
The Commit phase completed successfully.
The transacted install has completed.
C:\Program Files\Microsoft Visual Studio 9.0\VC>
I then went to RUN -> Services.msc I can see nothing in there.
There is a process in Task Manager called "Restarter.vshost.exe".
That's it.
I only wanted to install and debug it. I know it works (as it it runs and doesn't crash). But the code was written by a friend and I want to understand the underlying code by walking through it in debug mode.
Solution 1:
I recommend following pattern for debug:
var ServiceToRun = new SomeService();
if (Environment.UserInteractive)
{
// This used to run the service as a console (development phase only)
ServiceToRun.Start();
Console.WriteLine("Press Enter to terminate ...");
Console.ReadLine();
ServiceToRun.DoStop();
}
else
{
ServiceBase.Run(ServiceToRun);
}
Edit: make sure that your target is Console Application, not Windows Application, otherwise it will not work.
Solution 2:
you can debug it by attaching the debugger to the process. You can do this by either adding a line to the startup of your program:
Debugger.Launch ();
after adding the using statement:
using System.Diagnostics;
you will either need to put that in a conditional block or remove it when you are done debugging
or by running the service and then attaching to the process manually from the IDE: Debug->Attach to process..