Вывести предупреждающее сообщение о завершении службы Windows - PullRequest
0 голосов
/ 11 октября 2018

Я разработал службу Windows с Topshelf и c #.Он делает некоторые запросы к базе данных и записывает файл журнала.Работает нормально.Тем не менее, я хотел бы знать, когда служба закончила писать файл журнала и пока не нашла хорошего способа сделать это.

Есть ли способ показать консольное сообщение или сообщение командной строки DOSпредупредить или сообщить мне, что служба закончилась?

Я пытался отправить мне электронное письмо Outlook после завершения службы, но из-за ограничений моей компании я не могу отправлять электронные письма Outlook из программ Windows или использоватьGmail API.

1 Ответ

0 голосов
/ 11 октября 2018

Найдена функция исследования ответа: WTSSendMessage

Благодаря: .NET Windows Services (WTSSendMessage): отображает сообщение в XP, но не в Windows 7

       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);


        }
...