簡體   English   中英

是否可以在Windows服務中使用WMI?

[英]Is it possible to use WMI in a Windows service?

我正在編寫一個簡單的服務,以根據連接位置設置默認打印機,但是在服務中使用WMI時遇到問題。 我思考的越多,就越不可能做自己想做的事情。 因為服務並不與特定用戶相關聯,但是我想我還是會提出疑問,以防萬一我的懷疑是錯誤的。

這是我在做什么。

  1. 服務訂閱NetworkChange.NetworkAvailabilityChanged事件。
  2. 收到事件后,查詢WMI SELECT * FROM Win32_Printer WHERE Network=true
  3. 遍歷ManagementObjectCollection並檢查每台打印機的狀態。
  4. 如果打印機已連接,請調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM