我已經用C語言編寫了一個Windows服務,但缺乏用這種語言編寫服務的文檔意味着我需要一些幫助。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從獲得其命令行參數,是它的「啓動參數:」根據特定服務的屬性框?是可以安裝它與一些默認參數?是否有可能以後編程添加一些?
當另一個服務啓動時是否可以使我的服務有條件地啓動?
我怎麼能安裝在生產這種服務?我一直在使用Windows SDK的sc進行開發,但這不適用於生產。唯一的方法是確保安裝微軟.net框架,然後運行installutil程序?我的服務輸出到一個日誌文件:我的服務,而無需使用.NET框架,所以我本來希望會有一個方式,而無需安裝.NET
加分題安裝服務寫入的。是否有可能檢查文件的大小,如果超過任意文件大小,是否可以刪除它?
PS我不知道爲什麼列表中的代碼後,重置爲1 & 2,它顯然在編輯框中說,4和5。
提供的ServiceMain的參數是那些給StartService,如記錄HTTP:// msdn.microsoft.com/en-us/library/ms685138%28VS.85%29.aspx –