是否可以在.net中编写可执行的应用程序,可以注册为Win32服务并作为服务运行,但出于调试目的,可以作为控制台应用程序启动控制台输出(作为性能计数器,文本日志文件对于监测)
或者我应该将应用程序逻辑(Application类)放在一个单独的程序集中,并编写两个完全不同的可执行包装器(win32服务和控制台),用Application
类引用这个库?
控制台
main()
{
Application.Start();
Console.Readkey();
Application.Stop();
}
Win32服务
OnStart()
{
Application.Start();
}
OnStop()
{
Application.Stop();
}
答案 0 :(得分:3)
是的我以前做过这个。我创建了一个windoes服务项目,在项目属性(从Windows应用程序)上将类型更改为Console Application并添加了基于命令行参数的条件:
/// <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
也可以做到这一点。
答案 1 :(得分:1)
在Main()
方法中检测您是否要作为控制台或服务运行。如果作为控制台运行,只需直接呼叫OnStart()
即可。如果正在运行即服务,请致电Run()
。