[英]Is it possible to use WMI in a Windows service?
我正在編寫一個簡單的服務,以根據連接位置設置默認打印機,但是在服務中使用WMI時遇到問題。 我思考的越多,就越不可能做自己想做的事情。 因為服務並不與特定用戶相關聯,但是我想我還是會提出疑問,以防萬一我的懷疑是錯誤的。
這是我在做什么。
NetworkChange.NetworkAvailabilityChanged
事件。 SELECT * FROM Win32_Printer WHERE Network=true
。 ManagementObjectCollection
並檢查每台打印機的狀態。 ManagementObject.InvokeMethod("SetDefaultPrinter",null)
當我檢查安全事件日志時,我注意到了失敗審核事件“未知的用戶名或密碼錯誤”,我認為這是因為我沒有明確提供該信息。
有沒有沒有指定用戶名和密碼的方法,還是出於安全目的需要憑據?
該服務必須以某些用戶身份運行,例如NETWORK SERVICE,LOCAL SERVICE或SYSTEM。 您需要確保給定的帳戶具有執行所需操作的權限。 要更改Windows上已部署服務的權限,請轉到開始>管理工具>服務,然后您可以更改給定服務的服務帳戶。
我知道這是一個古老的問題,但是我認為現有的答案並不能提供一個可管理的解決方案。
正如指出要實現用戶默認打印機選擇一樣,您需要通過該用戶身份驗證,並且可以將Windows服務設置為作為特定用戶登錄,但更好的解決方案是...
使用隱藏的表單創建一個winforms程序,並在用戶使用Task Scheduler登錄時啟動它。
這樣,PC可以被許多用戶使用,並從應用程序中受益,而不必更改服務登錄設置。
我建議使用winforms應用程序,因為它的輸入欄很低,您可以從UI透視圖項目類型使用任何其他不可見的類型。
您應該為此使用linqtowmi ,效果很好!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.