需求描述:通过WIFI将照片传输到计算机的某个文件夹中,程序需要实时监控这个文件夹内文件的状态,如果有新的照片进来,要弹出一个框来要求用户输入图片描述和GPS位置。解决办法:要实时监控文件夹的状态,需要开发一个Windows Service。

1、创建新工程 (VS2008) file-->new-->project,选择Visual C#-->Windows-->Windows Service 在service的OnStart()和OnStop()里写上代码。

2 添加installer(必须,否则installutil无效,虽然指示安装成功) 在service 的设计视图中右键,选择Add Installer,添加installer,VS自动添加ProjectInstaller.cs,并在其中添加serviceInstaller1和 serviceProcessInstaller1组件。在ProjectInstaller的设计视图中选择 serviceProcessInstaller1,修改他的Account属性为LocalSystem;同样修改serviceInstaller1 的StartType属性,设置服务启动方式(手工、自动等)。

3 build你的project,生成service的exe文件

4、在Visual Studio 2008 命令提示符下改变路径到你项目所在的bin/Debug文件夹位置(如果你以Release模式编译则在bin/Release文件夹)

4. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。(InstallUtil这个程序在WINDOWS文件夹/Microsoft.NET/Framework/v1.1.4322下面)  

 4 安装 installutil service-exe-path

5 卸载 installutil /u service-exe-path  

6、启动程序,要先将之前安装的卸载,然后,重新生成,在服务管理器中重新启动该服务。

windows Service调试的方法:

      调试Windows比较特殊,因为程序是运行在后台的。这里介绍一下在VS2008下调试Windows服务的方法。
      假定项目名称为WinService, 服务名称为MyService, 先安装编译后的WinService.exe程序,安装成功后可以在控制面板中的服务管理器中看到,在服务管理器中启动MyService服务。然后在VS的调试菜单中打开附加到进程窗口,勾选显示所有用户进程,选择WinService.exe进程名,附加这个进程后即可进行调试。

在windows service中要弹出一个窗体或者需要与用户交互的问题:

一般不推荐在windows service中有这种需求,因为该服务应该是在后台自动静默运行的。可考试再增加一个socket监听的程序来完成这种需求。