0

我使用 Tow 方法将我的应用程序(Windows 应用程序)记录到文件和控制台屏幕

public static void InitLogFile(string filename)
{

    FileStream fs = new FileStream(filename, FileMode.Create);
    Trace.Listeners.Add(new TextWriterTraceListener(fs));
    Trace.AutoFlush = true;

}
public static void InitConsole()
{
    Trace.Listeners.Add(new ConsoleTraceListener());
    Trace.AutoFlush = true;
}

当我的 Windows 应用程序启动时,我使用此代码启动控制台屏幕

  [DllImport("kernel32.dll",EntryPoint = "GetStdHandle",SetLastError = true,CharSet = CharSet.Auto,
        CallingConvention = CallingConvention.StdCall)]
        private static extern IntPtr GetStdHandle(int nStdHandle);

        [DllImport("kernel32.dll",EntryPoint = "AllocConsole",SetLastError = true,CharSet = CharSet.Auto,
        CallingConvention = CallingConvention.StdCall)]
        private static extern int AllocConsole();


        private const int STD_OUTPUT_HANDLE = -11;
        private const int MY_CODE_PAGE = 437;

        void StartConsole()
        {
            AllocConsole();
            IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
            var safeFileHandle = new SafeFileHandle(stdHandle, true);
            var fileStream = new FileStream(safeFileHandle, FileAccess.Write);
            var encoding = Encoding.GetEncoding(MY_CODE_PAGE);
            var standardOutput = new StreamWriter(fileStream, encoding) {AutoFlush = true};
            Console.SetOut(standardOutput);
        }

我的问题是:

我将我的 Windows 应用程序转换windows service 为控制台日志屏幕不工作现在不出现如何让它工作?

4

2 回答 2

2

Windows 服务不像标准的 Windows 应用程序那样运行。当没有用户登录到计算机时它可能正在运行,那么控制台屏幕怎么会出现?

当作为服务运行时,您应该考虑写入 Windows 事件日志或其他一些日志记录机制。

于 2013-02-04T11:02:37.823 回答
1

您看不到任何东西的原因是Session 0 Isolation

但是,有一篇不错的 codeproject文章将在用户会话中从服务运行应用程序。

只需将您的代码放入 exe 文件,然后使用链接中的项目启动 exe 文件。

于 2013-02-04T11:03:12.597 回答