EDYCJA: Działa tylko podczas uruchamiania .exe, a nie podczas pracy jako usługa. Jako alternatywę można dodać opcję jako wartość konfiguracji i odczytać go przy rozruchu (co jest prawdopodobnie lepsza praktyka i tak):
using System.Configuration;
// snip
string foobar = null;
HostFactory.Run(configurator =>
{
foobar = ConfigurationManager.AppSettings["foobar"];
// do something with fooBar
configurator.Service<ServiceClass>(settings =>
{
settings.ConstructUsing(s => GetInstance<ServiceClass>());
settings.WhenStarted(s => s.Start());
settings.WhenStopped(s => s.Stop());
});
configurator.RunAsLocalService();
configurator.SetServiceName("ServiceName");
configurator.SetDisplayName("DisplayName");
configurator.SetDescription("Description");
configurator.StartAutomatically();
});
Zgodnie z dokumentacją trzeba określić polecenia w tym wzór:
-foobar:Test
trzeba także dodać definicję w konfiguracji usług:
string fooBar = null;
HostFactory.Run(configurator =>
{
configurator.AddCommandLineDefinition("fooBar", f=> { fooBar = f; });
configurator.ApplyCommandLine();
// do something with fooBar
configurator.Service<ServiceClass>(settings =>
{
settings.ConstructUsing(s => GetInstance<ServiceClass>());
settings.WhenStarted(s => s.Start());
settings.WhenStopped(s => s.Stop());
});
configurator.RunAsLocalService();
configurator.SetServiceName("ServiceName");
configurator.SetDisplayName("DisplayName");
configurator.SetDescription("Description");
configurator.StartAutomatically();
});
Po AddCommandLineDefinition() i przed // należy coś dodać, aby dodać następujący wiersz: configurator.ApplyCommandLine(); – Todd
Czy możesz dodać argument polecenia do ServiceClass? Próbuję to zrobić, ale nie będzie działać, gdy uruchomię go jako usługę. – fuLLMetaLMan
Tak. To nie działa podczas instalowania/uruchamiania go jako usługi. foobar jest pusty. @fuLLMetaLMan: Czy znalazłeś odpowiedź? –