我已经开发了一个windows服务,用的是Topshelf和c#。它对数据库进行一些查询,并写入一个日志文件。它运行良好。然而,我想知道什么时候服务已经完成了日志文件的写入,并且还没有找到一个好的方法来完成。
是否可以显示控制台消息或DOS命令行消息来警告或通知我服务已结束?
我试图在服务结束时给我发送一封Outlook电子邮件,但由于公司的限制,我无法从Windows程序或使用Gmail API发送Outlook电子邮件。
发布于 2018-10-12 03:51:29
找到答案搜索函数:WTSSendMessage
感谢:.NET Windows Services (WTSSendMessage) : Displays message on XP but not 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);
}
https://stackoverflow.com/questions/52766079
复制相似问题