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が原因です。

ただし、ユーザー セッションで、サービスからアプリを実行するコード プロジェクトの優れた記事があります。

コードを exe ファイルに入れ、リンクのプロジェクトを使用して exe ファイルを起動するだけです。

于 2013-02-04T11:03:12.597 に答える