C#程序安裝.net服務(不使用InstallUtil.exe)

前面寫了通常的寫.net服務 的方法。 其實也可以不用該工具來安裝服務,比如在一個Winform中點一個按鈕來實現安裝。 思路其實很簡單,你通過 System.Configuration.Install.ManagedInstallerClass 類中的靜態方法 InstallHelper就可以實現手工安裝。 該方法的簽名如下:

public static void InstallHelper(string[] args) 
其中參數 args 就是你用 InstallUtil.exe 工具安裝時的參數。一般就是一個exe的文件名。
實現的步驟如下:
前3步和 前面寫的一樣,可以參考這裏 
http://blog.csdn.net/lembo520390/archive/2009/06/02/4236379.aspx 
接着你可以新建一個winform的項目,在上面放一個按鈕,按鈕的點擊事件代碼可以這樣:
view plaincopy to clipboardprint?
/// <summary>   
   /// 安裝服務   
   /// </summary>   
   private void btnInstall_Click(object sender, EventArgs e)   
   {   
       string[] args = { "myService.exe"};   
       ServiceController sCtr = new ServiceController(serviceName);   
       if (!ServiceIsExisted(serviceName))   
       {   
           try 
           {   
               ManagedInstallerClass.InstallHelper(args);   
           }   
           catch (Exception ex)   
           {   
               MessageBox.Show(ex.Message);   
               return;   
           }   
       }   
       else 
       {   
           MessageBox.Show("該服務已經存在,不用重複安裝。");   
       }   
   } 
     /// <summary>
        /// 安裝服務
        /// </summary>
        private void btnInstall_Click(object sender, EventArgs e)
        {
            string[] args = { "myService.exe"};
            ServiceController sCtr = new ServiceController(serviceName);
            if (!ServiceIsExisted(serviceName))
            {
                try
                {
                    ManagedInstallerClass.InstallHelper(args);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
            else
            {
                MessageBox.Show("該服務已經存在,不用重複安裝。");
            }
        } 
其中ServiceIsExisted 是判斷服務是否存在的方法,代碼如下:
view plaincopy to clipboardprint?
/// <summary>   
/// 檢查指定的服務是否存在。   
/// </summary>   
/// <param name="serviceName">要查找的服務名字</param>   
/// <returns></returns>   
private bool ServiceIsExisted(string svcName)   
{   
    ServiceController[] services = ServiceController.GetServices();   
    foreach (ServiceController s in services)   
    {   
        if (s.ServiceName == svcName)   
        {   
            return true;   
        }   
    }   
    return false;   

        /// <summary>
        /// 檢查指定的服務是否存在。
        /// </summary>
        /// <param name="serviceName">要查找的服務名字</param>
        /// <returns></returns>
        private bool ServiceIsExisted(string svcName)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
            {
                if (s.ServiceName == svcName)
                {
                    return true;
                }
            }
            return false;
        }

然後把前面生成的myService.exe和這個winform生成的可執行文件放到同一個目錄下,
運行winform點按鈕就可實現和運行 InstallUtil.exe 工具一樣的效果。
其實 InstallUtil.exe內部也是調用了ManagedInstallerClass.InstallHelper方法。 自己Reflector一下就知道了。:)


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lembo520390/archive/2009/06/02/4236463.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章