一個windows服務程式,登錄身份是本地系統賬戶,程式中需要用CreateProcess創建一個子行程,當服務屬性選擇不允許服務與桌面互動時,CreateProcess回傳成功,但GetExitCodeProcess獲取到子行程的回傳碼是C0000142。實際子行程并沒有創建成功。郁悶的是這種情況并不是每次執行都會出現,有時失敗后重復1次就可以正常執行,有時重試很多次也無法成功,有時跑一天都很正常,沒有找到規律。
服務型別選了允許服務與桌面互動時還沒有發現這種情況,但是win7上執行會有彈出互動式服務檢測的提示,不太友好。
網上搜到了stackoverflow上的問題貼,沒發現合適的解決方法,因為這個服務啟動的子行程不是自己開發的,沒法修改子行程的原始碼。
windows官網上有session,station和desktop的解釋也沒太搞明白,大約是要用一個登錄的用戶去執行子行程。有沒有遇到過類似情況的朋友給一個解決方案:選擇不允許與桌面互動時可以成功創建子行程,選擇允許與桌面互動時不彈出互動式服務檢測提示,不要用停止Interactive Services Detection服務的方法,太暴力了。
uj5u.com熱心網友回復:
關于windows服務,我用得確實不多。之前只用過簡單的功能,讀取自定義格式的磁盤,該服務啟動后嘗試加載所有磁盤,并逐個查看是否有自定義的標記,如果有,就讀取這個磁盤(把這個磁盤加入可讀取串列),否則就跳過,不加入串列。該服務不創建其它行程,在有需要該服務時,就通過預先定義的管道來通訊。這個服務需要以administrator用戶安裝并設定為隨系統啟動而啟動。安裝并設定完后,就可以用普通用戶登錄系統并使用該服務了。至于樓主說的創建子行程,createProcess(),我也用的不多,僅用過簡單的創建一個行程,然后就不管它了,當然是在普通程式里而不是在服務里。
根據網上搜索C0000142,再加上我的理解,估計還是權限問題。子行程需要訪問某些資源,但有時候這個資源被鎖定或者其它情況導致無法被子行程訪問,此時出現問題。
不知道樓主的子行程是做什么用的,是否需要和其它本地程式互動
uj5u.com熱心網友回復:
CreateProcessAsUser轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/62481.html
標籤:硬件/系統
