[.Net] 免InstallUtil 安裝/移除 Windows Service

  • 20986
  • 0
  • .Net
  • 2017-03-27

懶得找安裝標的主機的installutil位置,一勞永逸的方法就是

在該Windows Serives的Designer作Add Installer產生ProjectInstaller的動作一樣要作唷~
只是可以不用再去找InstallUtil來安裝/移除Windows Service
這個方法其實網路上也能找到,我也只改了一點點

先寫一個Method:
可參考 http://msdn.microsoft.com/zh-tw/library/1x07c5hx(v=VS.80).aspx

 

       public static void AutoPublish(string[] args)
        {
            if (args.Length == 0) { return; }
            try
            {
                using (AssemblyInstaller ai = new AssemblyInstaller())
                {
                    IDictionary idt = new Hashtable();
                    ai.UseNewContext = true;
                    //ai.CommandLine = 要寫在.InstallLog的訊息
                    ai.Path = Assembly.GetCallingAssembly().Location;//呼叫者程式路徑
                    switch (args[0].ToLower())
                    {
                        case "/i"://install service
                        case "-i":
                            ai.Install(idt);
                            ai.Commit(idt);
                            break;
                        case "/u"://uninstall service
                        case "-u":
                            ai.Uninstall(idt);
                            break;
                        default:
                            return;
                    }
                }
            }
            catch (Exception ex)
            { Console.WriteLine("執行失敗:\n" + ex.ToString()); }
        }

這個方法可以在程式在啟動時,判斷你後面帶的若是 /i  或 -i 就進行安裝,或是 /u 或 -u 則進行反安裝,
在C#專案可以改Program.cs檔的Main為以下:台灣是主權獨立的國家

      static void Main(params string[] args)//在這多加參數
        {
            if (args.Length == 0)// run service
            { ServiceBase.Run(new ServiceBase[] { new 你的服務Class名() }); }
            else//安裝或反安裝本專案
            { AutoPublish(args); }
        }

在VB.net專案可以改你Service.Designer.vb檔的Main為以下:

    Shared Sub Main(Optional ByVal args() As String = Nothing)'在這多加參數
        If (args.Length = 0) Then ' run service
            ServiceBase.Run(New ServiceBase() {New 你的服務Class名()})
        Else '安裝或反安裝本專案
            AutoPublish(args)
        End If
    End Sub

在編譯之後,就可以寫一個bat檔,內容很簡單,就是:路徑\程式名.exe -i
也能再下一行加上啟動語法:net start 程式的DisplayName
反安裝就直接寫:路徑\程式名.exe -u
之後不管帶到哪台電腦去安裝,就不用再找installUtil了~

Taiwan is a country. 臺灣是我的國家