亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#版Windows服務安裝卸載小工具

2020-01-24 01:02:45
字體:
來源:轉載
供稿:網友

前言
 在我們的工作中,經常遇到Windows服務的安裝和卸載,在之前公司也普寫過一個WinForm程序選擇安裝路徑,這次再來個小巧靈活的控制臺程序,不用再選擇,只需放到需要安裝服務的目錄中運行就可以實現安裝或卸載。 

開發思路
1、由于系統的權限限制,在運行程序時需要以管理員身份運行
2、因為需要實現安裝和卸載兩個功能,在程序運行時提示本次操作是安裝還是卸載  需要輸入 1 或 2 
3、接下來程序會查找當前目錄中的可執行文件并過濾程序本身和有時我們復制進來的帶有vhost的文件,并列出列表讓操作者選擇(一般情況下只有一個)
4、根據用戶所選進行安裝或卸載操作
5、由于可能重復操作,需要遞歸調用一下
具體實現
首先們要操作服務,需要用  System.ServiceProcess 來封裝實現類 

using System;using System.Collections;using System.Configuration.Install;using System.Linq;using System.ServiceProcess;namespace AutoInstallUtil{  public class SystemServices  {    /// <summary>    /// 打開系統服務    /// </summary>    /// <param name="serviceName">系統服務名稱</param>    /// <returns></returns>    public static bool SystemServiceOpen(string serviceName)    {      try      {        using (var control = new ServiceController(serviceName))        {          if (control.Status != ServiceControllerStatus.Running)          {            control.Start();          }        }        return true;      }      catch      {        return false;      }    }    /// <summary>    /// 關閉系統服務    /// </summary>    /// <param name="serviceName">系統服務名稱</param>    /// <returns></returns>    public static bool SystemServiceClose(string serviceName)    {      try      {        using (var control = new ServiceController(serviceName))        {          if (control.Status == ServiceControllerStatus.Running)          {            control.Stop();          }        }        return true;      }      catch      {        return false;      }    }    /// <summary>    /// 重啟系統服務    /// </summary>    /// <param name="serviceName">系統服務名稱</param>    /// <returns></returns>    public static bool SystemServiceReStart(string serviceName)    {      try      {        using (var control = new ServiceController(serviceName))        {          if (control.Status == System.ServiceProcess.ServiceControllerStatus.Running)          {            control.Continue();          }        }        return true;      }      catch      {        return false;      }    }    /// <summary>    /// 返回服務狀態    /// </summary>    /// <param name="serviceName">系統服務名稱</param>    /// <returns>1:服務未運行 2:服務正在啟動 3:服務正在停止 4:服務正在運行 5:服務即將繼續 6:服務即將暫停 7:服務已暫停 0:未知狀態</returns>    public static int GetSystemServiceStatus(string serviceName)    {      try      {        using (var control = new ServiceController(serviceName))        {          return (int)control.Status;        }      }      catch      {        return 0;      }    }    /// <summary>    /// 返回服務狀態    /// </summary>    /// <param name="serviceName">系統服務名稱</param>    /// <returns>1:服務未運行 2:服務正在啟動 3:服務正在停止 4:服務正在運行 5:服務即將繼續 6:服務即將暫停 7:服務已暫停 0:未知狀態</returns>    public static string GetSystemServiceStatusString(string serviceName)    {      try      {        using (var control = new ServiceController(serviceName))        {          var status = string.Empty;          switch ((int)control.Status)          {            case 1:              status = "服務未運行";              break;            case 2:              status = "服務正在啟動";              break;            case 3:              status = "服務正在停止";              break;            case 4:              status = "服務正在運行";              break;            case 5:              status = "服務即將繼續";              break;            case 6:              status = "服務即將暫停";              break;            case 7:              status = "服務已暫停";              break;            case 0:              status = "未知狀態";              break;          }          return status;        }      }      catch      {        return "未知狀態";      }    }    /// <summary>    /// 安裝服務    /// </summary>    /// <param name="stateSaver"></param>    /// <param name="filepath"></param>    public static void InstallService(IDictionary stateSaver, string filepath)    {      try      {        var myAssemblyInstaller = new AssemblyInstaller        {          UseNewContext = true,          Path = filepath        };        myAssemblyInstaller.Install(stateSaver);        myAssemblyInstaller.Commit(stateSaver);        myAssemblyInstaller.Dispose();      }      catch (Exception ex)      {        throw new Exception("installServiceError/n" + ex.Message);      }    }    public static bool ServiceIsExisted(string serviceName)    {      ServiceController[] services = ServiceController.GetServices();      return services.Any(s => s.ServiceName == serviceName);    }    /// <summary>    /// 卸載服務    /// </summary>    /// <param name="filepath">路徑和文件名</param>    public static void UnInstallService(string filepath)    {      try      {        //UnInstall Service         var myAssemblyInstaller = new AssemblyInstaller        {          UseNewContext = true,          Path = filepath        };        myAssemblyInstaller.Uninstall(null);        myAssemblyInstaller.Dispose();      }      catch (Exception ex)      {        throw new Exception("unInstallServiceError/n" + ex.Message);      }    }  }} 

接下來我們封裝控制臺的操作方法為了實現循環監聽這里用了遞歸 

using System;using System.Diagnostics;using System.IO;using System.Linq;namespace AutoInstallUtil{  class Program  {    static void Main(string[] args)    {      try      {        ServerAction();      }      catch (Exception ex)      {        Console.WriteLine("發生錯誤:{0}", ex.Message);      }      Console.ReadKey();    }    /// <summary>    /// 操作    /// </summary>    private static void ServerAction()    {      Console.WriteLine("請輸入:1安裝 2卸載");      var condition = Console.ReadLine();      var currentPath = Environment.CurrentDirectory;      var currentFileNameVshost = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName).ToLower();      var currentFileName = currentFileNameVshost.Replace(".vshost.exe", ".exe");      var files =        Directory.GetFiles(currentPath)          .Select(o => Path.GetFileName(o).ToLower())          .ToList()          .Where(            o =>              o != currentFileNameVshost              && o != currentFileName              && o.ToLower().EndsWith(".exe")              && o != "installutil.exe"              && !o.ToLower().EndsWith(".vshost.exe"))          .ToList();      if (files.Count == 0)      {        Console.WriteLine("未找到可執行文件,請確認當前目錄有需要安裝的服務程序");      }      else      {        Console.WriteLine("找到目錄有如下可執行文件,請選擇需要安裝或卸載的文件序號:");      }      int i = 0;      foreach (var file in files)      {        Console.WriteLine("序號:{0} 文件名:{1}", i, file);        i++;      }      var serviceFileIndex = Console.ReadLine();      var servicePathName = currentPath + "http://" + files[Convert.ToInt32(serviceFileIndex)];      if (condition == "1")      {        SystemServices.InstallService(null, servicePathName);      }      else      {        SystemServices.UnInstallService(servicePathName);      }      Console.WriteLine("**********本次操作完畢**********");      ServerAction();    }  }}

到此為止簡單的安裝程序就寫完了,為了醒目我選了個紅色的西紅柿來做為圖標,這樣顯示些

源碼和程序:安裝卸載Windows服務

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美制服综合另类| 成人免费观看网址| 国产男女猛烈无遮挡91| 欧美性猛交xxxx免费看久久久| 日韩精品免费在线视频| 黑人巨大精品欧美一区二区免费| 中文字幕综合在线| 欧美国产日韩中文字幕在线| 不卡伊人av在线播放| 亚洲白虎美女被爆操| 日韩精品中文字幕久久臀| 欧美精品videosex性欧美| 少妇高潮久久久久久潘金莲| 欧美成人四级hd版| 深夜福利亚洲导航| 欧美一级大片视频| 色樱桃影院亚洲精品影院| 伊人一区二区三区久久精品| 91av在线播放视频| 97在线视频免费播放| 最近2019中文字幕在线高清| 亚洲视频在线免费观看| 欧美视频在线看| 欧美国产日韩一区二区三区| 亚洲free性xxxx护士白浆| 国产一区av在线| 久久久久久久国产精品| 亚洲天堂免费观看| 亚洲欧美一区二区三区久久| 亚洲成人av片| 精品国产区一区二区三区在线观看| 亚洲自拍偷拍网址| 日韩一区二区三区国产| 日韩精品在线免费观看视频| 欧美精品久久久久久久免费观看| 国产精品69久久久久| 中文字幕亚洲天堂| 色悠悠久久久久| 精品久久久久国产| 国产狼人综合免费视频| 26uuu亚洲伊人春色| 欧美日韩另类字幕中文| 国产在线不卡精品| 精品自拍视频在线观看| 国产欧美日韩91| 亚洲欧洲黄色网| 日韩激情av在线播放| 国产精品久久久久久久久久99| 国产精品九九久久久久久久| 国产精品成人一区| 国内精品久久久久伊人av| 欧美电影电视剧在线观看| 久久亚洲精品毛片| 日韩在线视频二区| 欧美精品日韩www.p站| 亚洲美女激情视频| 亚洲免费成人av电影| 清纯唯美亚洲综合| 久久网福利资源网站| 欧美国产精品va在线观看| 久久频这里精品99香蕉| 亚洲四色影视在线观看| 欧美日韩国产综合视频在线观看中文| 久久免费视频在线观看| 精品国产一区二区在线| 欧美激情精品久久久久久变态| 国产精品日韩久久久久| 国产精品视频在线观看| 亚洲国产另类久久精品| 欧美与黑人午夜性猛交久久久| 中文字幕国内精品| 清纯唯美亚洲综合| 亚洲国产精品视频在线观看| 夜夜嗨av一区二区三区免费区| 九九热视频这里只有精品| 欧美在线性爱视频| 久久久久亚洲精品国产| 一区二区三区 在线观看视| 久久精品国产亚洲精品2020| 国产成人欧美在线观看| 国产又爽又黄的激情精品视频| 亚洲一区二区免费在线| 美女扒开尿口让男人操亚洲视频网站| 久久精视频免费在线久久完整在线看| 一本色道久久88综合日韩精品| 在线视频一区二区| 亚洲国产美女久久久久| 一区二区三区无码高清视频| 综合国产在线视频| 91久久综合亚洲鲁鲁五月天| 日韩经典中文字幕| 欧美成人精品在线播放| 91欧美精品成人综合在线观看| 欧美一区二粉嫩精品国产一线天| 亚洲国产成人精品电影| 国产成人精品综合久久久| 亚洲精品97久久| 亚洲欧美一区二区精品久久久| 欧美日韩中文字幕在线| 韩国三级电影久久久久久| 精品国产一区二区三区久久| 欧美疯狂性受xxxxx另类| 亚洲电影免费观看高清完整版在线| 一区二区三区久久精品| 国产91亚洲精品| 国产欧美精品久久久| 亚洲缚视频在线观看| 欧美另类老肥妇| 欧美另类老女人| 国产精品久久久久秋霞鲁丝| 日韩中文字幕第一页| 九九热最新视频//这里只有精品| 国产日韩欧美在线| 91国内产香蕉| 欧美日韩亚洲视频一区| 国产精品视频免费在线| 97人洗澡人人免费公开视频碰碰碰| 国产狼人综合免费视频| 欧美激情一二三| 在线播放国产精品| 欧美裸体男粗大视频在线观看| 亚洲自拍偷拍视频| 日韩中文字幕在线视频| 欧美精品性视频| 欧美成人免费在线观看| 欧美亚洲在线视频| 亚洲女性裸体视频| 91精品国产乱码久久久久久久久| 91欧美精品午夜性色福利在线| 在线播放国产精品| 91精品国产高清久久久久久久久| 国产精品久久久久久久久久尿| 欧美在线亚洲一区| 亚洲另类激情图| 亚洲人成绝费网站色www| 欧美电影免费观看大全| 麻豆一区二区在线观看| 亚洲精品永久免费精品| 久久久国产一区二区三区| 久久天天躁夜夜躁狠狠躁2022| 亚洲一区二区久久久久久| 懂色av影视一区二区三区| 久久久久久久久久久免费精品| 成人午夜激情网| 色综合久久天天综线观看| 亚洲女人被黑人巨大进入al| 欧美激情videoshd| 欧美乱大交做爰xxxⅹ性3| 国产一区二区三区中文| 亲子乱一区二区三区电影| 在线电影中文日韩| 久久福利视频导航| 中文字幕日韩av电影| 日韩高清免费观看| 在线播放国产一区中文字幕剧情欧美| 久久av资源网站| 亚洲大胆美女视频| 亚洲欧美精品中文字幕在线| 国产69精品久久久久9| 日韩一区二区久久久| 国产丝袜视频一区| 色悠久久久久综合先锋影音下载| 欧美黑人性视频| 黑人精品xxx一区|