У меня есть консольное приложение, написанное для приема аргументов командной строки, которые будут использоваться при определении количества необходимых служб Windows. Командная строка для консольного приложения выглядит следующим образом: consoleapp.exe -server:11 -azure:7, где -server указывает службу Windows, а -azure указывает веб-задание Azure. [ПРИМЕЧАНИЕ: этот вопрос относится только к службе Windows, но я хотел показать, что консольное приложение потенциально может иметь много аргументов.] В консольном приложении я анализирую командную строку и, если команда соответствует " -server", то я хочу создать службу Windows с помощью TopShelf. Потенциально у меня может быть несколько серверных команд в командной строке консольного приложения или одиночные серверные команды с несколькими значениями, например: -server:11,7 или -server:11 -server:7 Для для каждого отдельного -сервера/значения я создаю задачу, которая, в свою очередь, создает и запускает службу Topshelf, например:
TopshelfExitCode retCode = HostFactory.Run(x =>
{
x.Service<TopshelfWindowsService>(sc =>
{
sc.ConstructUsing(name => new TopshelfWindowsService(companyConfig, runnerProgress));
sc.WhenStarted((s, hostControl) => s.Start(hostControl));
sc.WhenShutdown(s => s.Shutdown());
sc.WhenStopped((s, hostControl) => s.Stop(hostControl));
});
//
x.SetServiceName($"CommRunner {companyConfig.CompanyName + companyConfig.CompanyId}");
x.SetDescription($"Runner for CompanyID ({companyConfig.CompanyId})");
x.SetDisplayName($"Runner {companyConfig.CompanyId}");
//
x.StartAutomaticallyDelayed();
});
Моя проблема в том, что Topshelf, по-видимому, использует аргументы командной строки консольного приложения во время настройки службы, и в итоге я получаю сообщение об ошибке: «[Ошибка] Командная строка. Обнаружен неизвестный параметр командной строки: DEFINE: server = 11».
Можно ли делать то, что я пытаюсь сделать, и при этом использовать Topshelf? Есть ли способ отключить использование командной строки при настройке службы в Topshelf?