我使用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
控制台日志屏幕现在无法正常显示如何使其运行?
答案 0 :(得分:2)
Windows服务不像标准Windows应用程序那样运行。它可能在没有用户登录到计算机时运行,那么控制台屏幕怎么会出现?
作为服务运行时,您应该考虑写入Windows事件日志或其他一些日志记录机制。
答案 1 :(得分:1)
您没有看到任何内容的原因是Session 0 Isolation。
但是,有一个很好的代码项目article,它将在用户会话中从服务运行应用程序。
只需将代码放入exe文件中,然后使用链接中的项目启动exe文件。