One executable that starts as console or win32 service based on command line parameter in .NET?
Is it possible to write executable application in .net that can be registered as Win32 Service and operate as service but for debu开发者_运维百科g purposes can be launched as console application with console output (as performance counters, text log files are not very useful for monitoring)
Or shall I put application logic (Application class) in a separate assembly and write two completely different executable wrappers (win32 service and console) that reference this library with Application
class?
Console
main()
{
Application.Start();
Console.Readkey();
Application.Stop();
}
Win32 Service
OnStart()
{
Application.Start();
}
OnStop()
{
Application.Stop();
}
Yes I have done this before. I created a windoes service project, changed the type to Console Application on project properties (from windows application) and added a condition based on command line parameter:
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
// setup DI
BootStrapper.Setup();
if (!Environment.UserInteractive)
{
ServiceManager serviceManager = new ServiceManager();
serviceManager.Start();
}
else if(args.Length==1 && args[0]==HarnessGuid)
{
RunInHarnessMode();
}
else
{
ServiceBase[] servicesToRun = new ServiceBase[] { new ServiceManager() };
ServiceBase.Run(servicesToRun);
}
}
UserInteractive
can also do the trick.
In your Main()
method detect if you want to run as a console or service. If running as a console, just call OnStart()
directly. If running a as a service, call Run()
.
精彩评论