background image

这几天想做个文件监控服务,看了一下网上的关于

WINDOWS 服务的文章,数量都

不少,都只讲了如何做一个最基本的服务,却没有讲述如何与用户进行交互。查看了

MSDN

 

,看一下关于服务的描述:

 

  

Windows 服务应用程序在不同于登录用户的交互区域的窗口区域中运行。窗口区域

 

是包含剪贴板、一组全局原子和一组桌面对象的安全对象。由于

Windows 服务的区域不是

 

交互区域,因此

Windows 服务应用程序中引发的对话框将是不可见的,并且可能导致程

 

序停止响应。同样,错误信息应记录在

Windows 

 

事件日志中,而不是在用户界面中引发。

   

   

.NET Framework 

 

支持的

Windows 服务类不支持与交互区域(即登录用户)进行

交互。同时,

.NET Framework 

 

不包含表示区域和桌面的类。如果

Windows 服务必须与

 

其他区域进行交互,则需要访问非托管的

Windows API  

  也就是说我们要实现可交互的服务(比如我们想给服务在运行时做一些参数设置等)

那我们一定要

using System.Runtime.InteropServices 

  那么来看一下如果才能实现一个可交互的服务呢。步骤与实现基本的服务一样

(各位可

自行参考

MSDN 或网上 google 一下). 

  在实现

OnStart 时要注意,这里可不能弹出一个 FORM 什么的。这样做是没有任何反

应的。我们可以在这个方法里运行一个线程。该线程需要访问窗口区域对象或桌面对象,当

 

framework

 

里是没有提供这些的,要访问非托管代码的。

  来看一下代码,再运行试一下。