我正在编写一个基于TopShelf的简单Windows服务。如何将我的应用程序安装为服务?我试图执行SpyService.exe install
,但它不起作用。
接下来两种配置服务的方式有什么区别?
var cfg = RunnerConfigurator.New(
x =>
{
x.ConfigureService<SpyService>(s =>
{
s.Named("SpyService");
s.HowToBuildService(name => new SpyService());
s.WhenStarted(tc => {
XmlConfigurator.ConfigureAndWatch(new FileInfo(".\\log4net.config"));
tc.Start(); });
s.WhenStopped(tc => tc.Stop());
});
x.RunAsFromInteractive();
x.SetDescription("Сервис логирования действий пользователя.");
x.SetDisplayName("SpyService");
x.SetServiceName("SpyService");
});
Runner.Host(cfg, args);
和
var host = HostFactory.New(x =>
{
x.Service<SpyService>(s =>
{
s.SetServiceName("SpyService");
s.ConstructUsing(name => new SpyService());
s.WhenStarted(service =>
{
XmlConfigurator.ConfigureAndWatch(new FileInfo(".\\log4net.config"));
service.Start();
});
s.WhenStopped(service => service.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Сервис логирования действий пользователя.");
x.SetDisplayName("SpyService");
x.SetServiceName("SpyService");
});
host.Run();
我注意到如果我使用第二种方法成功安装了服务,但是无法像第一种方式一样以x.RunAsFromInteractive()
启动服务。
答案 0 :(得分:1)
您使用的是什么版本的Topshelf?旧语法为SpyService.exe service install
,但已经过简化。
答案 1 :(得分:0)
第一种方法在最新版本(2.2)中已经废弃。
关于RunAsFromInteractive(),查看topshelf源代码,我看到它调用带有空用户名/密码的RunAs():
public void RunAsFromInteractive()
{
this.RunAs("", "");
}
答案 2 :(得分:0)
您可以先以管理员身份运行Console命令,然后运行安装命令