厚街响应式网站设计,杭州网站设计工作室,推广网页的策划案,5m带宽做视频网站服务#xff08;Service#xff09;对于大家来说一定不会陌生#xff0c;它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序#xff0c;它随系统的“开启#xff5e;关闭”而“开始#xff5e;停止”其工作内容#xff0c;在这期间无需任何用… 服务Service对于大家来说一定不会陌生它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序它随系统的“开启关闭”而“开始停止”其工作内容在这期间无需任何用户参与。 Windows 服务在后台执行着各种各样任务支持着我们日常的桌面操作。有时候可能需要服务与用户进行信息或界面交互操作这种方式在XP 时代是没有问题的但自从Vista 开始你会发现这种方式似乎已不起作用。 Session 0 隔离实验 下面来做一个名叫AlertService 的服务它的作用就是向用户发出一个提示对话框我们看看这个服务在Windows 7 中会发生什么情况。 using System.ServiceProcess; using System.Windows.Forms; namespace AlertService { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { MessageBox.Show(A message from AlertService.); } protected override void OnStop() { } } } 程序编译后通过Installutil 将其加载到系统服务中 在服务属性中勾选“Allow service to interact with desktop” 这样可以使AlertService 与桌面用户进行交互。 在服务管理器中将AlertService 服务“启动”这时任务栏中会闪动一个图标 点击该图标会显示下面窗口提示有个程序AlertService正在试图显示信息是否需要浏览该信息 尝试点击“View the message”便会显示下图界面其实这个界面我已经不能从当前桌面操作截图了是通过Virtual PC 截屏的其原因请继续阅读。注意观察可以发现下图的桌面背景已经不是Windows 7 默认的桌面背景了说明AlertService 与桌面系统的Session 并不相同这就是Session 0 隔离作用的结果。 Session 0 隔离原理 在Windows XP、Windows Server 2003 或早期Windows 系统时代当第一个用户登录系统后服务和应用程序是在同一个Session 中运行的。这就是Session 0 如下图所示 但是这种运行方式提高了系统安全风险因为服务是通过提升了用户权限运行的而应用程序往往是那些不具备管理员身份的普通用户运行的其中的危险显而易见。 从Vista 开始Session 0 中只包含系统服务其他应用程序则通过分离的Session 运行将服务与应用程序隔离提高系统的安全性。如下图所示 这样使得Session 0 与其他Session 之间无法进行交互不能通过服务向桌面用户弹出信息窗口、UI 窗口等信息。这也就是为什么刚才我说那个图已经不能通过当前桌面进行截图了。 Session 检查 在实际开发过程中可以通过Process Explorer 检查服务或程序处于哪个Session会不会遇到Session 0 隔离问题。我们在Services 中找到之前加载的AlertService 服务右键属性查看其Session 状态。 可看到AlertService 处于Session 0 中 再来看看Outlook 应用程序 很明显在Windows 7 中服务和应用程序是处于不同的Session它们之间加隔了一个保护墙在下篇文章中将介绍如何穿过这堵保护墙使服务与桌面用户进行交互操作。 Service 下载 转载于:https://blog.51cto.com/186067/1280657