【C#】关于服务Service的操作(是否存在,是否启动,是否自动启动)

转载于http://blog.csdn.net/smartsmile2012/article/details/8666635

#region Windows服务控制区  
        /// <summary>
        /// 1,在使用ServiceController类前,我们必须引用命名空间System.ServiceProcess
        /// ,而引用该命名空间,我们又必须在引用中添加System.ServiceProcess引用
        /// 
        /// 2,ServiceController有两个名称,一个是DisplayName,一个是ServiceName:
        /// DisplayName-服务的友好名称,可用于标识该服务(就是我们在"控制面板"- >"服务"中看到的显示名称)
        /// ServiceName--服务进行标识的名称(这个才是服务的真正名称,也就是我们在"控制面板"- >"服务"中看到的服务名称)
        /// 
        /// 3,ServiceController中其它一些有用的方法与属性:
        /// 1)Status属性:指示该服务现在是正在运行、已停止还是已暂停,或者启动、停止、暂停或继续命令被挂起。
        /// 2)Pause()方法:暂停该服务。
        /// 3)Start()方法:启动该服务。
        /// 4)Stop()方法:停止该服务。
        /// </summary> 
#region 安装服务  
/// <summary>  
/// 安装服务  
/// </summary>  
private bool InstallService(string NameService)  
{  
    bool flag = true;  
    if (!IsServiceIsExisted(NameService))  
    {  
        try  
        {  
            string location = System.Reflection.Assembly.GetExecutingAssembly().Location;  
            string serviceFileName = location.Substring(0, location.LastIndexOf('\\') + 1) + NameService + ".exe";  
            InstallmyService(null, serviceFileName);  
        }  
        catch   
        {  
            flag = false;  
        }  
  
    }  
    return flag;  
}  
#endregion  
 
#region 卸载服务  
/// <summary>  
/// 卸载服务  
/// </summary>  
private bool UninstallService(string NameService)  
{  
    bool flag = true;  
    if (IsServiceIsExisted(NameService))  
    {  
        try  
        {  
            string location = System.Reflection.Assembly.GetExecutingAssembly().Location;  
            string serviceFileName = location.Substring(0, location.LastIndexOf('\\') + 1) + NameService + ".exe";  
            UnInstallmyService(serviceFileName);  
        }  
        catch   
        {  
            flag = false;  
        }  
    }  
    return flag;  
}  
#endregion  
 
#region 检查服务存在的存在性  
/// <summary>  
/// 检查服务存在的存在性  
/// </summary>  
/// <param name=" NameService ">服务名</param>  
/// <returns>存在返回 true,否则返回 false;</returns>  
public static bool IsServiceIsExisted(string NameService)  
{  
    ServiceController[] services = ServiceController.GetServices();  
    foreach (ServiceController s in services)  
    {  
        if (s.ServiceName.ToLower() == NameService.ToLower())  
        {  
            return true;  
        }  
    }  
    return false;  
}  
#endregion  
 
#region 安装Windows服务  
/// <summary>  
/// 安装Windows服务  
/// </summary>  
/// <param name="stateSaver">集合</param>  
/// <param name="filepath">程序文件路径</param>  
public static void InstallmyService(IDictionary stateSaver, string filepath)  
{  
    AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();  
    AssemblyInstaller1.UseNewContext = true;  
    AssemblyInstaller1.Path = filepath;  
    AssemblyInstaller1.Install(stateSaver);  
    AssemblyInstaller1.Commit(stateSaver);  
    AssemblyInstaller1.Dispose();  
}  
#endregion  
 
#region 卸载Windows服务  
/// <summary>  
/// 卸载Windows服务  
/// </summary>  
/// <param name="filepath">程序文件路径</param>  
public static void UnInstallmyService(string filepath)  
{  
    AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();  
    AssemblyInstaller1.UseNewContext = true;  
    AssemblyInstaller1.Path = filepath;  
    AssemblyInstaller1.Uninstall(null);  
    AssemblyInstaller1.Dispose();  
}  
#endregion  
 
#region 判断window服务是否启动  
/// <summary>  
/// 判断某个Windows服务是否启动  
/// </summary>  
/// <returns></returns>  
public static bool IsServiceStart(string serviceName)  
{  
    ServiceController psc = new ServiceController(serviceName);  
    bool bStartStatus = false;  
    try  
    {  
        if (!psc.Status.Equals(ServiceControllerStatus.Stopped))  
        {  
            bStartStatus = true;  
        }  
  
        return bStartStatus;  
    }  
    catch (Exception ex)  
    {  
        throw new Exception(ex.Message);  
    }  
}  
#endregion  
 
#region  修改服务的启动项  
/// <summary>    
/// 修改服务的启动项 2为自动,3为手动    
/// </summary>    
/// <param name="startType"></param>    
/// <param name="serviceName"></param>    
/// <returns></returns>    
public static bool ChangeServiceStartType(int startType, string serviceName)  
{  
    try  
    {  
        RegistryKey regist = Registry.LocalMachine;  
        RegistryKey sysReg = regist.OpenSubKey("SYSTEM");  
        RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet");  
        RegistryKey services = currentControlSet.OpenSubKey("Services");  
        RegistryKey servicesName = services.OpenSubKey(serviceName, true);  
        servicesName.SetValue("Start", startType);  
    }  
    catch (Exception ex)  
    {  
  
        return false;  
    }  
    return true;  
  
  
}  
#endregion  
 
#region 启动服务  
private bool StartService(string serviceName)  
{  
    bool flag = true;  
    if (IsServiceIsExisted(serviceName))  
    {  
        System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);  
        if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)  
        {  
            service.Start();  
            for (int i = 0; i < 60; i++)  
            {  
                service.Refresh();  
                System.Threading.Thread.Sleep(1000);  
                if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)  
                {  
                    break;  
                }  
                if (i == 59)  
                {  
                    flag = false;  
                }  
            }  
        }  
    }  
    return flag;  
}  
#endregion  
 
#region 停止服务  
private bool StopService(string serviceName)  
{  
    bool flag = true;  
    if (IsServiceIsExisted(serviceName))  
    {  
        System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);  
        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)  
        {  
            service.Stop();  
            for (int i = 0; i < 60; i++)  
            {  
                service.Refresh();  
                System.Threading.Thread.Sleep(1000);  
                if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)  
                {  
                    break;  
                }  
                if (i == 59)  
                {  
                    flag = false;  
                }  
            }  
        }  
    }  
    return flag;  
}  
#endregion  
 
#endregion  


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Onvif设备端开发中,GetServices函数用于获取设备支持的服务列表。这个函数是Onvif协议的一部分,用于查询设备上可用的服务类型和相关的URL信息。下面是一个示例代码,演示如何使用GetServices函数获取设备的服务列表: ```python from onvif import ONVIFCamera def get_services(): # 设备的IP地址、端口号、用户名和密码 ip = '192.168.1.100' port = 80 username = 'admin' password = 'password' # 创建ONVIFCamera对象 mycam = ONVIFCamera(ip, port, username, password) # 获取设备的服务列表 services = mycam.devicemgmt.GetServices(False) # 打印每个服务的信息 for service in services: print("Service: ", service.Name) print("Namespace: ", service.Namespace) print("XAddr: ", service.XAddr) print("") # 获取设备的服务列表 get_services() ``` 在这个示例中,我们使用了 `onvif` 库来进行Onvif设备操作。首先,我们创建了一个 `ONVIFCamera` 对象,并传入设备的IP地址、端口号、用户名和密码。然后,我们调用 `GetServices` 函数来获取设备的服务列表,并将返回的结果存储在 `services` 变量中。最后,我们遍历每个服务,并打印其名称、命名空间和URL(XAddr)信息。 请注意,具体返回的服务列表可能因设备而异,取决于设备的型号和支持的功能。同时,确保在使用这些代码时,根据实际情况进行适当的异常处理和错误处理。 希望这个示例对你有所帮助!如果你有进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值