这个例子既实现了系统托盘功能,也实现了多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
用ASP.NET控制Windows服务的开启与关闭
效果如图
代码
首页页面需要添加引用
页面的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