Я написал службу Windows на C, но отсутствие документации по написанию службы на этом языке означает, что у меня есть несколько вещей, с которыми мне нужна помощь.
Я хочу создать файл конфигурации, который служба читает, чтобы получить несколько настроек / опций. Мне интересно, что лучший способ сделать это и как это сделать. Служба .exe будет установлена вместе с другими файлами / программами в указанном пользователем месте. Первый вопрос, который у меня возникает, должен ли я сохранить этот файл конфигурации в том же каталоге, что и служба .exe, или поместить его в папку% appdata%, которую я создаю для своих программ?
Как служба сможет найти файл конфигурации. Должен ли я сохранить расположение файла конфигурации в реестре и жестко закодировать ключ реестра в службе? Или возможно установить службу так, чтобы она имела путь к файлу конфигурации в качестве аргумента командной строки по умолчанию? Или я должен сохранить свой конфигурационный файл в той же папке, что и служба .exe и использовать реестр HKLM/System/CurrentControlSet/Services/<servicename>/ImagePath
?
У меня есть следующий код:
void main() {
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = L"Service Name";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
}
void ServiceMain(int argc, char** argv) {
//stuff here
}
Откуда ServiceMain получает аргументы командной строки, это поле «Начальные параметры:» в свойствах конкретной службы? Возможно ли установить его с некоторыми параметрами по умолчанию? Можно ли добавить некоторые из них позже программно?
Можно ли условно запустить мой сервис при запуске другого сервиса?
Как я могу установить этот сервис на производстве? Я использовал sc из Windows SDK для разработки, но это не будет работать в производстве. Это единственный способ сделать это, убедиться, что Microsoft .NET Framework установлен, а затем запустить программу installutil? Мой сервис написан без использования .net framework, поэтому я надеялся, что будет способ установить сервис без установки .net
Бонус Вопрос: Моя служба выводит в файл журнала. Возможно ли проверить его размер и удалить его, если размер файла превышает произвольный размер?
PS Я не знаю, почему список сбрасывается на 1 и 2 после кода, в окне редактирования четко указаны 4 и 5.