Windows通过python模拟WMI调用?

时间:2009-09-23 09:17:44

标签: python django wmi pywin32

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

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

这有两个原因:

  1. LocalSystem帐户根本没有网络权限,这是一台网络打印机。 AddPrinterConnection WMI调用最终会发出一个不允许的COM调用。
  2. LocalSystem帐户无法访问这些打印机所在的域。他们需要域帐户才能访问。
  3. 因此,我得出的结论是,我需要冒充域用户来完成这项任务。我使用这里的代码完成了这个:

    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调用已成功完成。一旦我将该用户注销并在模拟该用户时重试该命令,我就会收到上述错误。

    这里发生了什么?

1 个答案:

答案 0 :(得分:0)

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