安装不带 InstallUtil.exe 的 .NET Windows 服务 [英] Install a .NET windows service without InstallUtil.exe

查看:20
本文介绍了安装不带 InstallUtil.exe 的 .NET Windows 服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用 C# 编写的标准 .NET Windows 服务.

I have a standard .NET windows service written in C#.

它可以在不使用 InstallUtil 的情况下自行安装吗?我应该使用服务安装程序类吗?我应该如何使用它?

Can it install itself without using InstallUtil? Should I use the service installer class? How should I use it?

我希望能够调用以下内容:

I want to be able to call the following:

MyService.exe -install

它和调用的效果是一样的:

And it will have the same effect as calling:

InstallUtil MyService.exe

推荐答案

是的,这是完全可能的(即我正是这样做的);您只需要引用正确的 dll (System.ServiceProcess.dll) 并添加一个安装程序类...

Yes, that is fully possible (i.e. I do exactly this); you just need to reference the right dll (System.ServiceProcess.dll) and add an installer class...

下面是一个例子:

[RunInstaller(true)]
public sealed class MyServiceInstallerProcess : ServiceProcessInstaller
{
    public MyServiceInstallerProcess()
    {
        this.Account = ServiceAccount.NetworkService;
    }
}

[RunInstaller(true)]
public sealed class MyServiceInstaller : ServiceInstaller
{
    public MyServiceInstaller()
    {
        this.Description = "Service Description";
        this.DisplayName = "Service Name";
        this.ServiceName = "ServiceName";
        this.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
    }
}

static void Install(bool undo, string[] args)
{
    try
    {
        Console.WriteLine(undo ? "uninstalling" : "installing");
        using (AssemblyInstaller inst = new AssemblyInstaller(typeof(Program).Assembly, args))
        {
            IDictionary state = new Hashtable();
            inst.UseNewContext = true;
            try
            {
                if (undo)
                {
                    inst.Uninstall(state);
                }
                else
                {
                    inst.Install(state);
                    inst.Commit(state);
                }
            }
            catch
            {
                try
                {
                    inst.Rollback(state);
                }
                catch { }
                throw;
            }
        }
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine(ex.Message);
    }
}

这篇关于安装不带 InstallUtil.exe 的 .NET Windows 服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆