使用程序代码安装/卸载.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、安装服务按钮点击事件

/// <summary>  
/// 安装服务  
/// </summary>  
/// <param name="sender"></param>  
/// <param name="e"></param>  
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、卸载服务点击事件

/// <summary>  
/// 卸载指定服务  
/// </summary>  
/// <param name="sender"></param>  
/// <param name="e"></param>  
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、检测服务是否存在代码

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值