Один исполняемый файл, который запускается как консоль или служба win32 на основе параметра командной строки в .NET? - PullRequest
0 голосов
/ 27 октября 2010

Можно ли написать исполняемое приложение в .net, которое может быть зарегистрировано как служба Win32 и работать как служба, но в целях отладки может быть запущено как консольное приложение с выводом консоли (в качестве счетчиков производительности файлы текстового журнала не очень полезны для мониторинг)

Или я должен поместить логику приложения (класс приложения) в отдельную сборку и написать две совершенно разные исполняемые оболочки (служба win32 и консоль), которые ссылаются на эту библиотеку с Application классом?

Консоль

main()
{
  Application.Start();
  Console.Readkey();
  Application.Stop(); 
}

Служба Win32

OnStart()
{
  Application.Start();
}

OnStop()
{
  Application.Stop();
}

Ответы [ 2 ]

3 голосов
/ 27 октября 2010

Да, я делал это раньше. Я создал проект службы windoes, изменил тип на Консольное приложение для свойств проекта (из приложения Windows) и добавил условие на основе параметра командной строки:

/// <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 голос
/ 27 октября 2010

В вашем методе Main() определите, хотите ли вы работать в качестве консоли или службы. Если вы используете консоль, просто позвоните OnStart() напрямую. Если вы работаете как сервис, звоните Run().

...