我正在尝试执行一个TopShelf服务。
目前,我只有一些测试代码来查看是否可以安装该服务。
到目前为止,我已经能够获得服务Start()
并在调试模式下执行。
从那里我安装了服务,例如ConsoleApp.exe Install
。
< br />该服务将显示在Services中,但是当我启动该服务时,它什么也没做,例如,当我在桌面上创建txt文件时(使用Visual Studio时会这样做) ,但是当我从服务启动服务时,它不会。
这是我到目前为止所拥有的。
首先,我创建Service Class
class FooService
{
public void Start()
{
string DESKTOP = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string Foo = "foo.txt";
string fullPath = System.IO.Path.Combine(DESKTOP, Foo);
using (System.IO.StreamWriter sw = new StreamWriter(fullPath))
{
sw.WriteLine("Hello World");
}
}
public void Stop()
{
Console.WriteLine("Service Stopped");
}
}
如您所见,我只是在桌面上创建一个txt文件(在VS中工作)。
从那里我配置服务。
internal static class ConfigureService
{
internal static void Config(string serviceName, string serviceDescription)
{
if (string.IsNullOrEmpty(serviceName) | string.IsNullOrEmpty(serviceDescription))
{
return;
}
HostFactory.Run(Config =>
{
Config.Service<FooService>(service =>
{
service.ConstructUsing(s => new FooService());
service.WhenStarted(s => s.Start()); // start event.
service.WhenStopped(s => s.Stop()); // stop event.
});
// Create Event.
Config.RunAsLocalSystem(); // user.
Config.SetServiceName(serviceName); // service name.
Config.SetDescription(serviceDescription); // service description.
});
}
}
最后我用以下命令执行它;
// Entry Point.
static void Main()
{
ConfigureService.Config("Foo Service", "some discription....Idk");
Console.ReadLine();
}
启动服务时,它说Running
,但是文件文本文件未出现在桌面上。