.net中如何启动windows服务?

yumanqing 2008-08-18 05:19:53
一个winform程序,有个窗体需要系统启动Print Spooler 服务(RPC),由于有些用户的这个服务没有自动启动,所以在窗体加载的时候先判断是否启动,如果没有,则先启动,代码如下:
//  Print Spooler
ServiceController controller = new ServiceController("Spooler");
if (controller.Status == ServiceControllerStatus.Stopped)
{
controller.Start();
controller.Refresh();
}

可现在如果此服务的启动类型是手动或者自动的话,可以正常启动,如果这个服务的启动类型是禁用的话,上面的代码就会出错,我尝试过修改启动类型,可总是不成功,请教.....
...全文
2135 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
s000rd 2009-07-13
  • 打赏
  • 举报
回复
学习了
l1314j 2009-04-11
  • 打赏
  • 举报
回复
听说回帖可以拿分呢



顺便报个道。学习一下
marvelstack 2008-09-08
  • 打赏
  • 举报
回复
常见的有两种方式实现,可以参考我这里的代码和文章,
使用C#控制远程计算机的服务
http://blog.csdn.net/zhzuo/archive/2004/03/29/22025.aspx
llxzj60 2008-09-05
  • 打赏
  • 举报
回复
一下代码供参考

System.ServiceProcess.ServiceController winService = null;
System.TimeSpan timeOut = new TimeSpan(0,1,0);//Set timeout
private void btnReStart_Click(object sender, System.EventArgs e)
{
try
{
InitilizeServiceController();
if (winService.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
winService.Stop();
winService.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped,timeOut);//wait service change to stopped status
this.label1.Text = "service status now is :"+winService.Status;
this.label1.Update();
System.Threading.Thread.Sleep(15000);
winService.Start();
winService.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.StartPending,timeOut);//wait service change to start pending status
this.label1.Text = "service status now is :"+winService.Status;
this.label1.Update();
winService.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running,timeOut);//wait service change to running status
this.label1.Text = "service status now is :"+winService.Status;
this.label1.Update();
}
else if (winService.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
this.label1.Text = "service status now is :"+winService.Status+",please click start button";
this.label1.Update();
}
else
{
this.label1.Text = "service status now is :"+winService.Status;
this.label1.Update();
}

}
catch(Exception ex)
{
this.label1.Text = ex.Message;
this.label1.Update();
}
}

/// <summary>
/// Initilize Service Controller
/// </summary>
private void InitilizeServiceController()
{
if (this.txtServiceName.Text.Trim().Length == 0)
{
throw new Exception("please enter service name");
}
string serviceName = this.txtServiceName.Text;
winService = new System.ServiceProcess.ServiceController(serviceName);//Get service by name
}
lfzwenzhu 2008-09-05
  • 打赏
  • 举报
回复
mark
homejiji 2008-09-05
  • 打赏
  • 举报
回复
学习了。。。
:)..
palmax 2008-09-05
  • 打赏
  • 举报
回复
调用Kernel32的ChangeServiceConfig,第一个参数正好用 ServiceController.ServiceHandle
Red_angelX 2008-08-28
  • 打赏
  • 举报
回复
OpenSCManager
StartService
yhy0611 2008-08-28
  • 打赏
  • 举报
回复
MARK
亮声lz 2008-08-27
  • 打赏
  • 举报
回复
mark一下
marvelstack 2008-08-27
  • 打赏
  • 举报
回复
建议使用WMI来做,参考,
使用C#控制远程计算机的服务
http://blog.csdn.net/zhzuo/archive/2004/03/29/22025.aspx
gaocumt 2008-08-26
  • 打赏
  • 举报
回复
学习..
GhostAdai 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yumanqing 的回复:]
试了一下,gomoku的方法可以解决,至于批处理文件启动服务及改注册表的方法,也试过可以实现,不过感觉是临时解决方法,谢谢大家了!
[/Quote]

能解决就是好方法,管它临时不临时呢,在没有更好的解决方法之前,那就叫最佳方案。
shuiguozheng 2008-08-26
  • 打赏
  • 举报
回复
我也来学!
AutoruN123 2008-08-24
  • 打赏
  • 举报
回复
学习了
marchonchina 2008-08-24
  • 打赏
  • 举报
回复
学习了!
kogo2005 2008-08-23
  • 打赏
  • 举报
回复
推荐一个计算机电子书下载站
顺风电子书 - 国内最专业的计算机电子书下载站
http://www.1kip.cn
zx2356 2008-08-23
  • 打赏
  • 举报
回复
Mark
yumanqing 2008-08-21
  • 打赏
  • 举报
回复
试了一下,gomoku的方法可以解决,至于批处理文件启动服务及改注册表的方法,也试过可以实现,不过感觉是临时解决方法,谢谢大家了!
leer168 2008-08-21
  • 打赏
  • 举报
回复
Mark
加载更多回复(17)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧