我創建了一個windows服務,用於檢查已安裝的打印機並更新當前位於「C:\ App \ Data \ info」(無文件擴展名)的文件非常簡單,只需調用帶有正確標誌和轉儲的EnumPrinters PRINTER_INFO_2到一個文件。爲什麼我的windows服務不斷地寫入文件?
在「測試」項目中,一切與Visual Studio 2010中的預期完全相同,導致我相信問題不在我的服務中。只要我將其安裝爲Windows服務,就會停止循環。它將通過循環運行一次,永不再次。
代碼參考:
我現在用的模板從這裏:http://www.kencotutorials.com/WindowsService.aspx 並不僅改變了服務類文件。
最初的想法是安全權限或等待功能不返回。
編輯:我已經檢查過整個文件系統,看它是否被寫入其他地方並確認它不是。
這是模板調用的服務循環函數。
void CMyService::MyServiceLoop(void)
{
CheckPrinters(); // updates a PRINTER_INFO_2 struct with all installed printers
WritePrinterFile(); // writes the file (i know there's no issue with the actual writing)
Sleep(10000);
OutputDebugString("Done sleeping");
Return;
}
我在shell應用程序循環的開始處添加了OutputDebugString(「Shell loop entered」)。 我還在WaitForSingleObject()的調用前添加了OutputDebugString(「Waiting for object」)
該循環似乎掛在WaitForSingleObject上。 DbgView中的最後一條消息是「等待對象」。
什麼是「睡眠(10000)」在那裏做? –
最初,當服務沒有安裝時,我需要減慢速度。我把它放在裏面,因爲我希望它每十秒鐘就會發射一次。這是否會導致問題? – rbuddicom