java - 如何启动控制台并从 Windows 服务中读取输出或模拟它?

标签 java c# process windows-services console-application

我有一些在我的 c# 控制台应用程序中使用的 jar 文件(通过 System.Diagnostics.Process 启动它们)并根据我的目的读取控制台输出。

现在我需要将此控制台应用程序更改为 Windows 服务。

m_process = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "java.exe",
        Arguments = arguments,
        UseShellExecute = false,
        LoadUserProfile = false,
        RedirectStandardOutput = true,
        RedirectStandardError = true,
    }
};

m_process.Start();
m_process.BeginOutputReadLine();
m_process.BeginErrorReadLine();
m_process.WaitForExit();
m_process.Close();
m_process.Dispose();

m_process.OutputDataReceived += ProcessOutputDataReceived;
m_process.ErrorDataReceived += ProcessErrorDataReceived;

jar 文件通过控制台输出为我提供满足我需要的信息。它可以在控制台应用程序中运行,但服务不会启动任何控制台,因此我无法读取输出。

我了解到我无法在 Windows 服务中启动控制台。但我正在寻找任何其他方式来启动我的 jar 文件并从中读取输出。

最佳答案

Windows 服务是一项后台作业。它没有控制台。

请记住,该服务在 Windows 启动后立即运行。这意味着它甚至在用户登录之前就运行。甚至没有用户可以向其显示控制台,即使您神奇地能够打开控制台。

在服务器上,根本不连接监视器是很常见的。谁会看到你的输出?

解决方案

如果您想从后台程序生成输出,请将其写入日志文件。

关于java - 如何启动控制台并从 Windows 服务中读取输出或模拟它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32122948/

相关文章:

c# - 使用 DateTime.Now 有什么问题。作为唯一 ID 的主要部分?

c# - 检测所有子进程是否关闭

Java 进程无缘无故挂起

java - 从 android 保存 csv。共享时文件无标题

c# - CSS 标题颜色从左上逐渐变为右下

c# - Keyboard.Focus 不适用于 WPF 中的文本框

java - 某些图像文件类型是否总是与某些 BufferedImage 常量类型相对应?

java - 发送 UTF-8 编码字符网络安全吗?

c - 如何找出物理内存的哪些部分包含哪些进程的数据/指令?

c - 如何通过C中的PID监视外部进程的事件?