C# 输出windows服务已完成的警告消息

C# 输出windows服务已完成的警告消息,c#,windows-services,topshelf,C#,Windows Services,Topshelf,我用Topshelf和c#开发了一个windows服务。它对数据库进行一些查询并写入一个日志文件。很好用。但是,我想知道服务何时完成了日志文件的编写,并且还没有找到一个好的方法来完成 是否可以通过显示控制台消息或DOS命令行消息来警告或通知我服务已结束 我尝试在服务完成后向我发送Outlook电子邮件,但由于我公司的限制,我无法从Windows程序或使用Gmail API发送Outlook电子邮件。找到答案搜索功能:WTSSendMessage 感谢: 禁止服务直接与用户的桌面交互。因此,您需

我用Topshelf和c#开发了一个windows服务。它对数据库进行一些查询并写入一个日志文件。很好用。但是,我想知道服务何时完成了日志文件的编写,并且还没有找到一个好的方法来完成

是否可以通过显示控制台消息或DOS命令行消息来警告或通知我服务已结束


我尝试在服务完成后向我发送Outlook电子邮件,但由于我公司的限制,我无法从Windows程序或使用Gmail API发送Outlook电子邮件。

找到答案搜索功能:WTSSendMessage

感谢:


禁止服务直接与用户的桌面交互。因此,您需要编写一个单独的用户应用程序,通过http | | pipes | | | tcp.ip | | filesystem(可能)等与服务通信。
       static extern bool WTSSendMessage(
              IntPtr hServer,
              [MarshalAs(UnmanagedType.I4)] int SessionId,
              String pTitle,
              [MarshalAs(UnmanagedType.U4)] int TitleLength,
              String pMessage,
              [MarshalAs(UnmanagedType.U4)] int MessageLength,
              [MarshalAs(UnmanagedType.U4)] int Style,
              [MarshalAs(UnmanagedType.U4)] int Timeout,
              [MarshalAs(UnmanagedType.U4)] out int pResponse,
              bool bWait);

    [DllImport("Kernel32.dll", SetLastError = true)]
    static extern int WTSGetActiveConsoleSessionID();

    public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
    public static int WTS_CURRENT_SESSION = 1;

        public static void Show_Message()
        {
            bool result = false;
            string title = "Aviso";
            int tlen = title.Length;
            string msg = "Service ended !";
            int mlen = msg.Length;
            int resp = 0;

            result = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, title, tlen, msg, mlen, 0, 0, out resp, true);
            //int err = Marshal.GetLastWin32Error();
            //System.Console.WriteLine("result:{0}, errorCode:{1}, response:{2}", result, err, resp);


        }