我正在创建一个窗口服务。我的要求是按特定时间间隔显示 Windows NT 服务的窗口窗体。出于测试目的,我只想在服务启动时显示表单:
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart -before form show");
Messager_Form obj = new Messager_Form();
obj.Show();
// System.Diagnostics.Process.Start("calc.exe");
eventLog1.WriteEntry("In OnStart -after form show");
// timer1.Start();
}
它不工作。表格未显示,计算进程也未运行。我找到了一些链接显示弹出窗口 https://stackoverflow.com/questions/8788325/showing-a-popup-form-a-windows-service,但大多数都建议WCF。没有wcf就不行吗?谁能告诉我实现这一目标的方法。
无法完成*。在更高版本的操作系统中,由于 Windows 服务不允许与桌面交互,因此无法工作 - 相反,Windows 服务呈现的 UI 显示在会话 0 http://msdn.microsoft.com/en-us/library/windows/desktop/bb756986.aspx,一个特殊的登录会话,通常对最终用户不可见。
相反,您应该做的是编写一个始终运行但并不总是可见的单独的 Windows 窗体应用程序(可能有该应用程序启动时运行 https://stackoverflow.com/questions/674628/how-do-i-set-a-program-to-launch-at-startup并在其中有一个图标通知区 https://devblogs.microsoft.com/oldnewthing/20030910-00/?p=42583)并使用某种形式与 Windows 服务进行通信IPC https://stackoverflow.com/questions/56121/ipc-mechanisms-in-c-sharp-usage-and-best-practices
当 Windows 服务希望向用户显示某些 UI 时,它会向应用程序发送一条消息,应用程序又向最终用户显示所需的 UI。
*或者至少绝对不应该这样做
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)