安装不带 InstallUtil.exe 的 .NET Windows 服务 [英] Install a .NET windows service without InstallUtil.exe
本文介绍了安装不带 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屋!
查看全文