2011-03-27 132 views
2

我正在编写基于TopShelf的简单Windows服务。如何将我的应用程序安装为服务?我试图执行SpyService.exe install,但它不起作用。将控制台应用程序安装为Windows服务

下面两种配置服务的方式有什么区别?

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

错误信息是什么? – 2011-03-27 21:38:03

+0

你运行过那个命令吗? – 2011-03-27 21:46:24

+0

嘿伙计!原谅我以这种方式问你,但我看不到其他交流方式。请在mysql日期问题中取消删除您的回答!没有错。 – 2011-03-31 07:26:23

回答

1

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

+0

我使用的是最新版本。 – akrisanov 2011-03-28 05:00:51

+0

根据第一种方式和第二种方式的问题,只有第一种方式接受来自控制台应用程序入口点的任何命令行参数。第二种方法可能不应该得到真正的支持。 – Travis 2011-03-30 11:41:28

0

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

关于RunAsFromInteractive(),望着topshelf源代码,我看到它叫的RunAs()与空的用户名/密码:

public void RunAsFromInteractive() 
{ 
    this.RunAs("", ""); 
} 
0

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

相关问题