【发布时间】:2010-12-28 20:55:10
【问题描述】:
我正在编写一个简单的服务来根据我的连接位置设置默认打印机,但是在我的服务中使用 WMI 时遇到了问题。我想得越多,我就越觉得不可能做我想做的事;作为一项服务与特定用户没有关联,但我想我还是会问一下,以防我的怀疑是错误的。
这就是我正在做的事情。
- 服务订阅
NetworkChange.NetworkAvailabilityChanged事件。 - 收到事件时查询 WMI
SELECT * FROM Win32_Printer WHERE Network=true。 - 循环通过
ManagementObjectCollection并检查每台打印机的状态。 - 如果打印机已连接,请致电
ManagementObject.InvokeMethod("SetDefaultPrinter",null)
当我检查安全事件日志时,我注意到失败审核事件“未知用户名或错误密码”,我假设这是因为我没有明确提供该信息。
有没有办法在不指定用户名和密码的情况下执行此操作,或者出于安全目的需要凭据?
【问题讨论】:
-
服务必须以 some 用户身份运行,可能是 NETWORK SERVICE、LOCAL SERVICE、SYSTEM 之类的?您需要确保给定帐户有权做您想做的事。
-
@Serguei - 我如何以用户身份运行服务?
-
部署服务后,您可以在服务属性中设置服务帐户,假设您使用的是 Windows 开始 > 管理工具 > 服务。
-
@Serguei - 请添加您的 cmets 作为答案,以便我接受,谢谢您的帮助。
-
开始->控制面板->管理工具->服务,右键点击服务选择“属性”,切换到登录选项卡。您可以设置运行服务的帐户并提供所需的任何密码。
标签: c# windows-services wmi