51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

【CSharp】Windows服务操作帮助类

本文最后更新于 2024-05-07,文章可能存在过时内容,如有过时内容欢迎留言或者联系我进行反馈。

代码示例 {#%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B}

using System;
using System.IO;
using Microsoft.Win32;
using System.Reflection;
using System.Collections;
using System.ServiceProcess;
using System.Configuration.Install;

namespace Common { /// <summary>服务状态</summary> public enum ServiceStatus { /// <summary>服务未安装</summary> 服务未安装 = 0,

    /// <summary>服务未运行</summary>
    服务未运行 = 1,

    /// <summary>服务正在启动</summary>
    服务正在启动 = 2,

    /// <summary>服务正在停止</summary>
    服务正在停止 = 3,

    /// <summary>服务正在运行</summary>
    服务正在运行 = 4,

    /// <summary>服务即将继续</summary>
    服务即将继续 = 5,

    /// <summary>服务即将暂停</summary>
    服务即将暂停 = 6,

    /// <summary>服务已暂停</summary>
    服务已暂停 = 7
}

/// <summary>Windows服务操作帮助类</summary>
public class ServiceUtil
{
    /// <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;
    }

    /// <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();
    }

    /// <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();
    }

    /// <summary>启动服务</summary>
    /// <param name=" NameService ">服务名</param>
    /// <returns>存在返回 true,否则返回 false;</returns>
    public static bool RunService(string NameService)
    {
        bool bo = true;
        try
        {
            ServiceController sc = new ServiceController(NameService);
            if (sc.Status.Equals(ServiceControllerStatus.Stopped) || sc.Status.Equals(ServiceControllerStatus.StopPending))
            {
                sc.Start();
            }
        }
        catch (Exception ex)
        {
            bo = false;
        }

        return bo;
    }

    /// <summary>停止服务</summary>
    /// <param name=" NameService ">服务名</param>
    /// <returns>存在返回 true,否则返回 false;</returns>
    public static bool StopService(string NameService)
    {
        bool bo = true;
        try
        {
            ServiceController sc = new ServiceController(NameService);
            if (!sc.Status.Equals(ServiceControllerStatus.Stopped))
            {
                sc.Stop();
            }
        }
        catch (Exception ex)
        {
            bo = false;
        }

        return bo;
    }

    /// <summary>获取服务状态</summary>
    /// <param name=" NameService ">服务名</param>
    /// <returns>返回服务状态</returns>
    public static ServiceStatus GetServiceStatus(string NameService)
    {
        ServiceStatus status = 0;
        try
        {
            ServiceController sc = new ServiceController(NameService);
            status = (ServiceStatus)Convert.ToInt16(sc.Status);
        }
        catch (Exception ex)
        {
            status = 0;
        }

        return status;
    }

    /// <summary>获取服务安装路径</summary>
    /// <param name="ServiceName"></param>
    /// <returns></returns>
    public static string GetWindowsServiceInstallPath(string ServiceName)
    {
        string path = "";
        try
        {
            string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName;
            path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();

            path = path.Replace("\"", string.Empty);//替换掉双引号

            FileInfo fi = new FileInfo(path);
            path = fi.Directory.ToString();
        }
        catch (Exception ex)
        {
            path = "";
        }
        return path;
    }

    /// <summary>获取指定服务的版本号</summary>
    /// <param name="serviceName">服务名称</param>
    /// <returns></returns>
    public static string GetServiceVersion(string serviceName)
    {
        if (string.IsNullOrEmpty(serviceName))
        {
            return string.Empty;
        }
        try
        {
            string path = GetWindowsServiceInstallPath(serviceName) + "\\" + serviceName + ".exe";
            Assembly assembly = Assembly.LoadFile(path);
            AssemblyName assemblyName = assembly.GetName();
            Version version = assemblyName.Version;
            return version.ToString();
        }
        catch (Exception ex)
        {
            return string.Empty;
        }
    }
}

}



赞(1)
未经允许不得转载:工具盒子 » 【CSharp】Windows服务操作帮助类