0

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

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

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

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

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

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

这里发生了什么?

4

1 回答 1

0

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

于 2009-12-04T03:47:13.457 回答