最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享。
1)、关于windows服务安装包的制作和自动启动服务
http://www.cnblogs.com/hb_cattle/archive/2011/12/04/2275319.html
http://www.cnblogs.com/yangbingqi/archive/2011/08/09/2132166.html
http://www.cnblogs.com/JemBai/archive/2009/04/30/1446696.html
2)、关于windows服务如是进行调试。
http://www.cnblogs.com/qfb620/archive/2008/12/17/1356994.html
实际上,我们可以直接在OnStart()方法中通过EventLog.WriteEntry("Hi,I'm wiseman");来向事件查看器中写入一些你感兴趣的信息,很大程度上可以解决debug的问题.
3)、关于win7系统上安装问题需要注意的问题。
http://blog.csdn.net/dragonpeng2008/article/details/6653004
添加应用程序清单文件 app.manifest 只要把 asInvoker替换成requireAdministrator,我们的程序就会默认要求管理员权限运行了
特别注意,在运行vs Cmd工具的时候,一定要以管理员的身份运行,否则注册installutil命令将不会执行。
4)、在ProjectInstaller服务安装类中想通过App.config配置文件来动态读取Service1的Description和DisplayName和ServiceName和StartType信息时异常原因。
关于windwos服务,ProjectInstaller服务安装类中InitializeComponent方法是读取不到App.config文件的!!!
个人是这样理解的认为windwos服务应用程序是有系统sys32运行调用的,所以需要修改到安装服务进程所在的目录。
string strPath = Assembly.GetCallingAssembly().Location;
或者string strPath = Environment.CurrentDirectory
在Service1服务类中,完全可以用ConfigurationSettings.AppSettings["test"]或者ConfigurationManager.AppSettings["test"]方法来获取。
5)、windows服务调试小技巧。
可以叫错误信息输出到事件日志查看器中
EventLog eventLog =new EventLog("Application",
ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );
//写入事件日志
eventLog.WriteEntry(messageText, LogEntryType);