如何 查找window service 中的服务[50分,解决问题后,马上给分]

endisoft 2008-02-20 10:49:40
我现在需要做这样一个功能:

我知道服务的名称,我想通过程序去查找,这个服务有没有注册,如果没有注册,再去注册服务(.NET 1.1)

先谢各位,回复者必有分。谢谢..
...全文
94 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
genlinux 2008-02-21
  • 打赏
  • 举报
回复
.NET 1.1: http://msdn2.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(VS.71).aspx
.NET 2.0: http://msdn2.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(VS.80).aspx
.NET 3.0: http://msdn2.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(VS.85).aspx
.NET 3.5: http://msdn2.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx
genlinux 2008-02-21
  • 打赏
  • 举报
回复
谁说1.1没有 System.ServiceProcess?
你要自己添加reference. 默认是没有的, 因为这个namespace不是在mscorlib里。
endisoft 2008-02-21
  • 打赏
  • 举报
回复
兄弟们,System.ServiceProcess and System.Management,在.net 1.1下没有呀。
有没有谁给给出.NET 1.1下的解决方案???
genlinux 2008-02-21
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
using System.Windows.Forms;
using System.Management;

namespace SurveyorLayerControl
{
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
this.AfterInstall += new InstallEventHandler(ProjectInstaller_AfterInstall);
this.BeforeInstall += new InstallEventHandler(ProjectInstaller_BeforeInstall);
this.serviceInstaller1.ServiceName = "MyService";
this.serviceInstaller1.DisplayName = "Dummy Service";
}

void ProjectInstaller_BeforeInstall(object sender, InstallEventArgs e)
{
//check for required the Services.
//ServiceController[] sc = ServiceController.GetServices();
//bool Required_Services_Found = false;
//for (int i = 0; i < sc.Length; i++)
//{
// if (sc[i].ServiceName.ToLower() == "myservice")
//{
// Required_Services_Found = true;
// break;
// }
//}
//
//Required_Services_Found = true; //just for testing purposed. this will be removed.
//
ServiceController sc = new ServiceController(this.serviceInstaller1.ServiceName);
//如果你要找的是你这个相同的服务的话, 那this.serviceInstaller1.ServiceName就应该是你的windows service的名字了。
//注意DisplayName and ServiceName是不同的. 在你的代码里,如果你在某些地方更改了ServiceName,那上面的这一行代码就找不到你的service,
//你也可以用:ServiceController sc = new ServiceController("服务名称");
if (sc != null) //如果不是null,那这个服务就是存在的了。
{
MessageBox.Show("对不起,\n在您的系统中已经安装有本服务,请按确定退出安装.......", "安装错误", MessageBoxButtons.OK, MessageBoxIcon.Stop);
Application.Exit();
}
}

void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
//Starts up the Service.
ServiceController sc = new ServiceController(this.serviceInstaller1.ServiceName);
if (sc != null)
{
//sc.Start();
//
//sc.WaitForStatus(ServiceControllerStatus.Running);
//MakeServiceInteractive();
}
}

}
}
brookmill 2008-02-20
  • 打赏
  • 举报
回复
System.ServiceProcess.ServiceController[] services;
services = ServiceController.GetServices();
protected void SetServiceStatus(ServiceController controller)
{
buttonStart.Enabled = true;
buttonStop.Enabled = true;
buttonPause.Enabled = true;
buttonContinue.Enabled = true;
if (!controller.CanPauseAndContinue)
{
buttonPause.Enabled = false;
buttonContinue.Enabled = false;
}
if (!controller.CanStop)
{
buttonStop.Enabled = false;
}
ServiceControllerStatus status = controller.Status;
switch (status)
{
case ServiceControllerStatus.ContinuePending:
1119
Windows Services
textServiceStatus.Text = “Continue Pending”;
buttonContinue.Enabled = false;
break;
case ServiceControllerStatus.Paused:
textServiceStatus.Text = “Paused”;
buttonPause.Enabled = false;
buttonStart.Enabled = false;
break;
case ServiceControllerStatus.PausePending:
textServiceStatus.Text = “Pause Pending”;
buttonPause.Enabled = false;
buttonStart.Enabled = false;
break;
case ServiceControllerStatus.StartPending:
textServiceStatus.Text = “Start Pending”;
buttonStart.Enabled = false;
break;
case ServiceControllerStatus.Running:
textServiceStatus.Text = “Running”;
buttonStart.Enabled = false;
buttonContinue.Enabled = false;
break;
case ServiceControllerStatus.Stopped:
textServiceStatus.Text = “Stopped”;
buttonStop.Enabled = false;
break;
case ServiceControllerStatus.StopPending:
textServiceStatus.Text = “Stop Pending”;
buttonStop.Enabled = false;
break;
default:
textServiceStatus.Text = “Unknown status”;
break;
}
LRG315 2008-02-20
  • 打赏
  • 举报
回复
不管有没存在,都进行注册,然后自定义捕抓'服务已存在'的错误处理,不中止程序运行就OK.
wanabe 2008-02-20
  • 打赏
  • 举报
回复
up

110,534

社区成员

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

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

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