【问题标题】:Windows impersonation for WMI calls via python?通过 python 进行 WMI 调用的 Windows 模拟?
【发布时间】:2009-09-23 09:17:44
【问题描述】:

我正在使用 PyWin32 从我的 django Web 应用程序在 python 中对系统进行 WMI 调用。我的目标是允许用户通过 Web 界面将打印机添加到系统中。为此,我使用的是 win32print.AddPrinterConnection。

这在我的用户帐户下运行开发服务器效果很好。我可以添加我想要的所有打印机。但是,最终,这将需要在以 LocalSystem 帐户运行的 apache 下运行。

这是有问题的,原因有两个:

  1. Lo​​calSystem 帐户根本没有网络权限,这是一台网络打印机。 AddPrinterConnection WMI 调用最终会发出一个将被禁止的 COM 调用。
  2. Lo​​calSystem 帐户无权访问这些打印机所在的域。他们需要域帐户才能访问。

因此,我得出的结论是,我需要模拟域用户来完成此任务。我已经使用此处的代码完成了此操作:

http://code.activestate.com/recipes/81402/

这似乎有效,因为我能够验证我已成功模拟调用代码。不幸的是,在模拟之后,我总是从 win32print.AddPrinterConnection API 调用中得到这个错误:

Exception Type: error 
Exception Value: (2, 'AddPrinterConnection', 'The system cannot find the file specified.')

你知道为什么会这样吗?

非常感谢!皮特

更新

我注意到,如果我正在模拟的用户当前登录到系统,则 AddPrinterConnection API 调用成功完成。一旦我注销该用户并在模拟该用户时重试该命令,就会收到上述错误。

这是怎么回事?

【问题讨论】:

    标签: python django wmi pywin32


    【解决方案1】:

    对于具体问题我无能为力,但我确实知道,如果我必须在 Windows 上使用 Python 处理 WMI 的东西,我肯定会使用 Tim Golden 的 Python WMI 模块而不是 pywin32。也许在使用该模块的文档/食谱或 Google 搜索中,您可以找到解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2014-11-04
      • 2015-07-10
      • 2011-09-27
      • 2021-12-31
      相关资源
      最近更新 更多