最近用c#寫了一個window services,利用 installutil.exe註冊成功以後,就開始測試了.
程式碼我就不列出來了,我的這個 window service 中利用水晶報表的 PrintToPrinter(),進行資料的列印,當然這裡的印表機是網路印表機.服務一啟動,發現印表機並沒有正常的進行列印,查看日誌
"指定的印表機無效。"!難道網路地址不對,或者是其他的代碼出現問題,仔細檢查以後,測試!問題依然存在.
於是將所有的列印代碼,複製到一個winform程式中,運行....一切正常,印表機正常列印.
初次遇到這個問題,想想:難道服務中的不能找到映射出的網路,或者說沒有許可權訪問網路資源!
開啟工作管理員:
印象名稱 使用者名稱
winform(test) 系統登陸時候的使用者名稱.
window service system
所以猜想問題就出在這裡,對於網路資源,或者說網路伺服器,只認識你的當前登陸的使用者,而對於system則拒絕訪問.
雖然本地來說system的許可權很高,但是對於訪問網路來說,則不相同.
於是想到一段代碼:(install 類裡面)
this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.spInstaller.Password = null;
this.spInstaller.Username = null;
將上述代碼改為:
this.spInstaller.Account = System.ServiceProcess.ServiceAccount.User;
this.spInstaller.Password = "pwd";
this.spInstaller.Username = @"機器名\登陸名";
然後將服務卸載以後,重新註冊,一切正常!
後面又發現其實上面的代碼無須更改,可以在服務註冊成功之後,在管理的服務中找到註冊的服務,然後右鍵屬性-登陸,把其中的賬戶修改為你的登陸賬戶,然後啟動服務,同樣也可以訪問.