使用程序代码安装/卸载.net服务(不使用InstallUtil.exe)

前面写了通常的写.net服务 的方法。 其实也可以不用该工具来安装服务,比如在一个Winform中点一个按钮来实现安装。 思路其实很简单,你通过 System.Configuration.Install.ManagedInstallerClass 类中的静态方法InstallHelper就可以实现手工安装。 该方法的签名如下:

public static void InstallHelper(string[] args) 
其中参数 args 就是你用 InstallUtil.exe 工具安装时的参数。一般就是一个exe的文件名。

下面我们来看看如何实现:

1、首先我们照上一片文章配置好系统服务,并且生成一个exe文件。

2、这里我们用一个winform来做,上面画2个按钮(一个安装服务,一个卸载服务)。

3、安装服务按钮点击事件

///   
/// 安装服务  
///   
///   
///   
private void button1_Click(object sender, EventArgs e)  
{  
    string[] args = { "HP.Travel_Mail_Service.exe" };//要安装的服务文件(就是用 InstallUtil.exe 工具安装时的参数)  
    ServiceController svcCtrl = new ServiceController(serviceName);  
    if (!ServiceIsExisted(serviceName))  
    {  
        try  
        {  
            System.Configuration.Install.ManagedInstallerClass.InstallHelper(args);  
            MessageBox.Show("服务安装成功!");  
        }  
        catch (Exception ex)  
        {  
            MessageBox.Show(ex.Message);  
            return;  
        }  
    }  
    else  
    {  
        MessageBox.Show("该服务已经存在,不用重复安装。");  
    }  
} 



4、卸载服务点击事件

///   
/// 卸载指定服务  
///   
///   
///   
private void button2_Click(object sender, EventArgs e)  
{  
    try  
    {  
        if (ServiceIsExisted(serviceName))  
        {  
            //UnInstall Service  
            System.Configuration.Install.AssemblyInstaller myAssemblyInstaller = new System.Configuration.Install.AssemblyInstaller();  
            myAssemblyInstaller.UseNewContext = true;  
            myAssemblyInstaller.Path = "HP.Travel_Mail_Service.exe";  
            myAssemblyInstaller.Uninstall(null);  
            myAssemblyInstaller.Dispose();  
            MessageBox.Show("卸载服务成功!");  
        }  
        else  
        {  
            MessageBox.Show("服务不存在!");  
        }  
  
    }  
    catch (Exception)  
    {  
        MessageBox.Show("卸载服务失败!");  
    }  
  
}  



5、检测服务是否存在代码

///   
/// 检查指定的服务是否存在  
///   
/// 要查找的服务名字  
///   
private bool ServiceIsExisted(string svcName)  
{  
    ServiceController[] services = ServiceController.GetServices();  
    foreach (ServiceController s in services)  
    {  
        if (s.ServiceName == svcName)  
        {  
            return true;  
        }  
    }  
    return false;  
}  


然后把前面生成的服务exe和这个winform生成的可执行文件放到同一个目录下,
运行winform点按钮就可实现和运行 InstallUtil.exe 工具一样的效果。

你可能感兴趣的:(.Net)