我正在编写一个简单的服务来根据我连接的位置设置默认打印机,但我在服务中使用WMI时遇到了问题。我想的越多,我认为可以做我想做的事情就越少;因为服务与某个特定用户无关,但我想如果我的怀疑是错误的话我会问它。
这就是我正在做的事情。
NetworkChange.NetworkAvailabilityChanged
活动。SELECT * FROM Win32_Printer WHERE Network=true
。ManagementObjectCollection
并检查每台打印机的状态。ManagementObject.InvokeMethod("SetDefaultPrinter",null)
当我检查安全事件日志时,我注意到失败审核事件“未知用户名或密码错误”,我假设是因为我没有明确提供该信息。
有没有办法在不指定用户名和密码的情况下执行此操作,或者出于安全目的需要凭据?
答案 0 :(得分:1)
该服务必须以某些用户身份运行,例如NETWORK SERVICE,LOCAL SERVICE或SYSTEM。您需要确保给定帐户有权执行您想要的操作。 要在Windows上更改已部署服务的权限,请转到“开始”>管理工具>然后,您可以更改服务的服务帐户。
答案 1 :(得分:0)
我知道这是一个老问题,但我觉得现有的答案并不能提供一个可管理的解决方案。
正如指出影响用户默认打印机选择,您需要作为该用户进行身份验证,同时可以将Windows服务设置为以特定用户身份登录,更好的解决方案是...
使用隐藏表单创建winforms程序,并在用户使用任务计划程序登录时启动它。
这样,PC可以被许多用户使用,并且无需更改服务登录设置即可从应用程序中受益。
我建议使用winforms应用程序,因为它具有较低的条目栏,您可以使用UI透视项目类型中的任何其他类型的隐形。
答案 2 :(得分:-1)
你应该使用linqtowmi这样做很棒!