Действительно ли возможно Начать процесс Java под службой Windows с C#?

Я хотел бы перенести программу Java на службу окон с использованием C# System.ServiceProcess.ServiceBase. Таким образом, я придумал следующий код:

/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
    System.ServiceProcess.ServiceBase.Run(new JavaLauncher());
}
protected override void OnStart(string[] args)
{
    Thread _thread;
    _thread = new Thread(StartService);
    _thread.Start();
    base.OnStart(args);
}
protected override void OnStop()
{
    Thread _thread;
    _thread = new Thread(StopService);
    _thread.Start();
    base.OnStop();
}
static public void StartService()
{
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.EnableRaisingEvents = false;
    proc.StartInfo.FileName = "javaw";
    proc.StartInfo.Arguments = config.generateLaunchCommand();
    proc.Start();
}
static public void StopService()
{
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.EnableRaisingEvents = false;
    proc.StartInfo.FileName = "javaw";
    proc.StartInfo.Arguments = "-jar stop.jar";
    proc.Start();
}

Во-первых я должен был использовать Потоки в OnStart и OnStop. В противном случае исключение происходит, жалуясь, что сервис завершается из-за выполнения ничего.

Во-вторых, сервис может быть сцеплен до окон гладко. Однако сервис завершает короткое время после того, как он будет запущен. Я изучил монитор процесса, только сервисный процесс остается в живых в течение того короткого времени, процесс javaw никогда не обнаруживался, как бы то ни было. Есть ли кто-либо, кто знает, как это может быть зафиксировано?

Это хорошо работает в обычной консольной среде. Я думаю, что это имеет некоторое отношение к службе Windows.

1
задан Winston Chen 21 May 2010 в 11:26
поделиться

2 ответа

То, что процесс Java не отображается, не означает, что он не запускался. Он мог запуститься и сразу выключиться. Попробуйте перенаправить stdout / stderr, чтобы увидеть, что происходит.

Также переменная proc в методах StartService и stopservice является локальной переменной. Когда он выходит за пределы области видимости, ваш объект процесса собирается сборщиком мусора. Интересно, приводит ли это к тому, что ваш Java-процесс умирает

1
ответ дан 3 September 2019 в 00:24
поделиться

Я бы порекомендовал вам использовать решение с открытым исходным кодом.

См. Этот пост Как создать службу Windows из приложения java
Я бы предложил использовать это http://sourceforge.net/projects/yajsw/

1
ответ дан 3 September 2019 в 00:24
поделиться