Создайте комбинированную командную строку / приложение службы Windows

Вы можете использовать TypeReference. Test.class невозможно в Java.

TypeReference testStringType = new TypeReference>() { };
Object value = mapper.readValue(json, testStringType);

Также работает:

JavaType javaType = mapper.getTypeFactory().constructParametricType(Test.class, String.class);
Test value1 = mapper.readValue(json, javaType);

См. Также:

13
задан marc_s 30 April 2009 в 21:06
поделиться

4 ответа

Да, можно.

Один из способов сделать это - использовать параметр командной строки, скажем, «/ console», чтобы отличать версию консоли от версии, выполняемой в качестве службы:

  • создайте консольное приложение Windows, а затем
  • в Program.cs, точнее в функции Main, вы можете проверить наличие параметра "/ console"
  • , если есть "/ console", запустить программу нормально
  • , если параметр не существует Вызовите свой класс Service из ServiceBase


// Class that represents the Service version of your app
public class serviceSample : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        // Run the service version here 
        //  NOTE: If you're task is long running as is with most 
        //  services you should be invoking it on Worker Thread 
        //  !!! don't take too long in this function !!!
        base.OnStart(args);
    }
    protected override void OnStop()
    {
        // stop service code goes here
        base.OnStop();
    }
}

...

Затем в Program.cs:


static class Program
{
    // The main entry point for the application.
    static void Main(string[] args)
    {
        ServiceBase[] ServicesToRun;

    if ((args.Length > 0) && (args[0] == "/console"))
    {
        // Run the console version here
    }
    else
    {
        ServicesToRun = new ServiceBase[] { new serviceSample () };
        ServiceBase.Run(ServicesToRun);
    }
}

}

19
ответ дан 1 December 2019 в 21:12
поделиться

Лучший способ сделать это с точки зрения дизайна - это реализовать все свои функциональные возможности в проекте библиотеки и создать вокруг него отдельные проекты-оболочки, чтобы они выполнялись так, как вы хотите (то есть служба Windows, программа командной строки, веб-сервис asp.net, сервис wcf и т. д.)

4
ответ дан 1 December 2019 в 21:12
поделиться

Да, это так? может быть сделано.

Ваш класс запуска должен расширять ServiceBase.

Вы можете использовать статический метод запуска void Main (string [] args) для анализа переключателя командной строки для запуска в режиме консоли.

Что-то вроде:

static void Main(string[] args)
{
   if ( args == "blah") 
   {
      MyService();
   } 
   else 
   {
      System.ServiceProcess.ServiceBase[] ServicesToRun;
      ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() };
      System.ServiceProcess.ServiceBase.Run(ServicesToRun);
   }
3
ответ дан 1 December 2019 в 21:12
поделиться

Служба Windows сильно отличается от обычной программы Windows; Вам лучше не пытаться делать две вещи одновременно.

Рассматривали ли вы сделать это вместо запланированной задачи?

Служба Windows против запланированной задачи

1
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: