我正在使用 PyWin32 从我的 django Web 应用程序在 python 中对系统进行 WMI 调用。我的目标是允许用户通过 Web 界面将打印机添加到系统中。为此,我使用的是 win32print.AddPrinterConnection。
这在我的用户帐户下运行开发服务器效果很好。我可以添加我想要的所有打印机。但是,最终,这将需要在作为 LocalSystem 帐户运行的 apache 下运行。
这是有问题的,原因有两个:
- LocalSystem 帐户根本没有网络权限,这是一台网络打印机。AddPrinterConnection WMI 调用最终会发出一个不允许的 COM 调用。
- 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 调用成功完成。一旦我注销该用户并在模拟该用户时重试该命令,我就会收到上述错误。
这里发生了什么?