window 服务(二)

接Window服务(一)

ServiceController方法调用
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
this.AutoLog = true;
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
WriteLog(state);
ServiceController[] sc = ServiceController.GetDevices();
string str = "";
for (int i = 0; i < sc.Length; i++)
{
WriteLog(sc[i].ServiceName + @"\t" + sc[i].DisplayName + @"\t" + sc[i].Status);
}
WriteLog(" ");
ServiceController[] scArr = ServiceController.GetServices();
for (int i = 0; i < scArr.Length; i++)
{
WriteLog(scArr[i].ServiceName + "\t" + scArr[i].DisplayName + "\t" + scArr[i].Status);
}
ServiceController s = new ServiceController();
s.ServiceName = "Sina";
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
WriteLog(state);
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
}
public void WriteLog(string str)
{
using (StreamWriter sw = File.AppendText(@"c:\service.txt"))
{
sw.WriteLine(str);
sw.Flush();
}
}
}


复制代码
 1  public partial class Service1 : ServiceBase
 2     {
 3         public Service1()
 4         {
 5             InitializeComponent();
 6             this.AutoLog = true;
 7         }
 8         protected override void OnStart(string[] args)
 9         {
10             // TODO: 在此处添加代码以启动服务。
11             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
12             WriteLog(state);
13             ServiceController[] sc = ServiceController.GetDevices();
14             string str = "";
15             for (int i = 0; i < sc.Length; i++)
16             {
17                 WriteLog(sc[i].ServiceName + @"\t" + sc[i].DisplayName + @"\t" + sc[i].Status);
18             }
19             WriteLog(" ");
20             ServiceController[] scArr = ServiceController.GetServices();
21             for (int i = 0; i < scArr.Length; i++)
22             {
23                 WriteLog(scArr[i].ServiceName + "\t" + scArr[i].DisplayName + "\t" + scArr[i].Status);
24             }
25             ServiceController s = new ServiceController();
26             s.ServiceName = "Sina";
27             s.Stop();
28         }
29         protected override void OnStop()
30         {
31             // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
32             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
33             WriteLog(state);
34         }
35         private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
36         {
37             WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
38         }
39         public void WriteLog(string str)
40         {
41             using (StreamWriter sw = File.AppendText(@"c:\service.txt"))
42             {
43                 sw.WriteLine(str);
44                 sw.Flush();
45             }
46         }
47     }
复制代码

 

 

ServiceController属性

属性   描述    
CanPauseAndContinue 表示服务是否可以停止
CanShutDown 表示服务在系统关闭时是否可以得到通知,CanStop表示服务器是否可以被停止
DependentServices 表示与服务相关联的设备
DisplayName 表示服务控制器所绑定的名称
MachineName 表示服务所在的计算机名称
ServiceName 表示绑定的服务名称
ServiceType 表示控制器所引用的服务类型
ServicesDependedOn   表示服务所依赖ude服务集合Status表示控制器所引用的服务状态

 

 

 

 

 

 

 

 

ServiceInstaller类

ServiceInstaller的属性

属性   描述
DisplayName 显示名称
ServiceName 表示服务名称,这个名称必须与Installer将要安装的windows服务名称相同
ServiceDependOn 服务所要用到的其服务名称的一个数组
StartType 表示所安装服务的启动特性,可以为Automatic,Manual或Disable,默认为Manual

 

 

 

 

 

 

ServiceInstaller事件

方法 事件
AfterInstaller() 调用Install方法后发生
AfterRollback() 调用Rollback后发生
AfterUninstall() 调用Uninstall方法后发生
BeforeInstall() 调用Install方法前发生
BeforeRollback() 调用Rollback方法前发生
BeforeUninstall() 调用Uninstall方法前发生
Committed() 调用Commit方法后发生
Committing() 调用Commit方法前发生

 

 

 

 

 

 

 

 

 

ServiceProcessInstaller类

用于安装ServiceBase继承的windows服务,它与一个可执行程序中的所有服务所做基本工作相同

属性

属性 描述
Account 运行服务的当前用户账号  
HelpText   在服务安装选项中给出的帮助信息
Password   运行服务的当前账号密码
UserName   运行服务的当前账号用户名

 

 

 

 

吊死windows服务

1,日志调试法

2,附加进程断电调试法

步骤:

vs打开MySerivceLog项目

在管理工具-〉服务里面启动MyServiceLog服务

单击vs的调试 -〉附加到进程,如下图

window 服务(二)_第1张图片

在"可用进程“列表中,选中你要调式的服务的可执行文件名

单击 ”附加“按钮,即可进入调试状态

在timer1_Elapsed方法里设置一个断点,然后等它执行,服务执行到该处时候会自动启动断点。

window 服务(二)_第2张图片

另外,定时服务可能会定时的访问本域或者非本域的页面,

解决办法用WebClient

1  WebClient client = new WebClient();
2  string uri = "http://127.0.0.1/rss/sina.aspx";
3  byte[] by = client.DownloadData(uri);

 

你可能感兴趣的:(window 服务(二))