这个例子既实现了系统托盘功能,也实现了多windows服务的控制,非常实用!
using System; namespace UBISerialsController { /// <summary> /// Class1 的摘要说明。 /// </summary> public class Class1 { static System.ServiceProcess.ServiceController sc; static System.Windows.Forms.NotifyIcon ni; static System.Windows.Forms.ContextMenu cm; static System.Timers.Timer timer; public Class1() { // // TODO: 在此处添加构造函数逻辑 // } static void Main() { try { sc=new System.ServiceProcess.ServiceController("UBISerials"); ni=new System.Windows.Forms.NotifyIcon(); ni.Visible=false; cm=new System.Windows.Forms.ContextMenu(); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("停止",new EventHandler(StopService))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("暂停",new EventHandler(PauseService))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("继续",new EventHandler(ContiuneService))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("开始",new EventHandler(StartService))); cm.MenuItems.Add("-"); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("关于",new EventHandler(About))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("退出",new EventHandler(Exit))); ni.ContextMenu=cm; ni.Visible=true; SetUpTimer(); System.Windows.Forms.Application.Run(); } catch(System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } private static void StopService(object sender,System.EventArgs e) { if(sc.Status==System.ServiceProcess.ServiceControllerStatus.Running&&sc.CanStop==true) { try { sc.Stop(); } catch(System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void PauseService(object sender,System.EventArgs e) { if(sc.Status!=System.ServiceProcess.ServiceControllerStatus.Paused&&sc.CanPauseAndContinue==true) { try { sc.Pause(); } catch(System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void ContiuneService(object sender,System.EventArgs e) { if(sc.Status==System.ServiceProcess.ServiceControllerStatus.Paused&&sc.CanPauseAndContinue==true) { try { sc.Continue(); } catch(System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void StartService(object sender,System.EventArgs e) { if(sc.Status==System.ServiceProcess.ServiceControllerStatus.Stopped) { try { sc.Start(); } catch(System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void About(object sender,System.EventArgs e) { System.Windows.Forms.MessageBox.Show("2005.4.3","关于"); } private static void Exit(object sender,System.EventArgs e) { try { timer.Dispose(); sc.Dispose(); cm.Dispose(); ni.Dispose(); System.Windows.Forms.Application.Exit(); } catch(System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } private static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { GetServiceState(); } private static void GetServiceState() { sc.Refresh(); switch(sc.Status) { case System.ServiceProcess.ServiceControllerStatus.Stopped: { ni.Icon=new System.Drawing.Icon("stopped.ico"); cm.MenuItems[0].Enabled=false; cm.MenuItems[1].Enabled=false; cm.MenuItems[2].Enabled=false; cm.MenuItems[3].Enabled=true; break; } case System.ServiceProcess.ServiceControllerStatus.Running: { ni.Icon=new System.Drawing.Icon("started.ico"); cm.MenuItems[0].Enabled=true; cm.MenuItems[1].Enabled=true; cm.MenuItems[2].Enabled=false; cm.MenuItems[3].Enabled=false; break; } case System.ServiceProcess.ServiceControllerStatus.Paused: { ni.Icon=new System.Drawing.Icon("paused.ico"); cm.MenuItems[0].Enabled=false; cm.MenuItems[1].Enabled=false; cm.MenuItems[2].Enabled=true; cm.MenuItems[3].Enabled=false; break; } default: { ni.Icon=new System.Drawing.Icon("paused.ico"); break; } } } private static void SetUpTimer() { timer=new System.Timers.Timer(); timer.Interval=500; timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); timer.Start(); } } }
原文地址:http://blog.csdn.net/rosekisser/article/details/2111731
效果如图
代码
首页页面需要添加引用
页面的pageload中
实例化windows服务
protected void Page_Load(object sender, EventArgs e)
{
//此处代码用于显示页面加载中的效果,可以无视。
ClientScript.RegisterClientScriptBlock(GetType(), "", initJavascript());
//实例化windows服务,LedIPTransfer为我自己写的windows服务,大家可以用
service = new ServiceController("LedIPTransfer");
OnLoad();
}
至于服务名称的获取,查看服务详情后复制显示名称即可。
用于显示页面当前服务的状态
private void OnLoad()
{
//获取服务的运行状态
string state = service.Status.ToString();
switch (state)
{
case "Stopped":
lblState.Text = "服务已停止";
btnRestart.Enabled = false;
btnStart.Enabled = true;
btnStop.Enabled = false;
break;
case "Running":
lblState.Text = "服务运行中";
btnStart.Enabled = false;
btnRestart.Enabled = true;
break;
/* 以下服务状态仅供参考,除非服务启动很慢,一般不需进行如下设置
case "Paused":
lblState.Text = "服务已暂停";
break;
case "StartPending":
lblState.Text = "服务正在启动";
break;
case "StopPending":
lblState.Text = "服务正在停止";
break;
case "ContinuePending":
lblState.Text = "服务即将继续";
break;
case "PausePending":
lblState.Text = "服务即将暂停";
break;
* */
}
}
///<summary>
///启动服务
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protectedvoid btnStart_Click(object sender,EventArgs e)
{
service.Start();
//等待服务到达运行状态
service.WaitForStatus(ServiceControllerStatus.Running);
ClientScript.RegisterStartupScript(GetType(),"","window.location.href=window.location.href",true);
}
///<summary>
///停止服务
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protectedvoid btnStop_Click(object sender,EventArgs e)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped);
ClientScript.RegisterStartupScript(GetType(),"","window.location.href=window.location.href",true);
}
///<summary>
///重启服务
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protectedvoid btnRestart_Click(object sender,EventArgs e)
{
//停止服务
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped);
//启动服务
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running);
ClientScript.RegisterStartupScript(GetType(),"","window.location.href=window.location.href",true);
}
ASP.NET 方式开启服务,都需要很高的权限,所以如果你权限不够是无法开启的。
在system.web 下面加 identiy 可以模拟用户具有管理员权限
<system.web>
<identity impersonate="true" userName="用户名" password="密码" />
</system.web>
原文地址:http://blog.csdn.net/ysq5202121/article/details/8124185