2

我正在编写一个基于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()像第一种方法那样启动服务。

4

3 回答 3

1

您使用的是什么版本的 Topshelf?旧的语法是SpyService.exe service install但已被简化。

于 2011-03-27T22:48:13.713 回答
0

第一种方法在最新版本(2.2)afaik 中已过时。

关于 RunAsFromInteractive(),查看 topshelf 源代码,我看到它名为 RunAs(),用户名/密码为空:

public void RunAsFromInteractive()
{
    this.RunAs("", "");
}
于 2011-04-07T02:58:17.770 回答
0

您可以先以管理员身份运行控制台命令,然后运行安装命令

于 2013-03-23T16:47:51.653 回答