2016-12-01 60 views
0

我再次在我的Windows服務上工作,並試圖修改shell註冊表項(HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon:Shell)。在某些情況下嘗試從服務中修改註冊表失敗?

最初我試圖在SERVICE_CONTROL_STOP到達時在ServiceControlHandler例程中這樣做。在測試期間,通過啓動/停止該服務的過程一直在登錄(我可以看到該值已更改)。但是當我要關閉/重啓系統時,值沒有改變。

接下來我嘗試在用戶登錄或關閉時執行相同的操作(由ServiceControlHandler中的SERVICE_CONTROL_SESSIONCHANGE觸發)。爲了驗證可能的代碼應該在一般情況下工作,我嘗試在WTS_SESSTION_LOGOFF和WTS_SESSION_LOCK的情況下修改密鑰 - 在鎖定/解鎖系統後,我可以看到該值已更改。再一次,當我真的註銷時,價值沒有改變。

你有什麼想法,爲什麼這不起作用?

+0

哪個'Reg ...'函數失敗,返回什麼錯誤代碼? –

+0

該服務使用Qt 5.4編碼,該值將由QSettings :: setValue()函數設置。目前我試圖找出代碼塊是否會被觸及(在「真正」關閉/註銷的情況下)。 –

+1

你意識到在系統關閉期間你沒有得到'SERVICE_CONTROL_STOP'?您可以改爲「SERVICE_CONTROL_SHUTDOWN」 - 但只能在服務狀態中設置「SERVICE_ACCEPT_SHUTDOWN」位。 –

回答

1

我有時看到過這種行爲,聽起來像是「有時來不及」。不是100%肯定如果這是THE soulution,但在寫入值後我添加了QSettings :: sync(),問題似乎消失了。

相關問題