2009-09-23 61 views
0

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

这很好地运行我的用户帐户下的开发服务器。我可以添加我想要的所有打印机。但是,最终,这需要在作为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调用成功完成,如果说我冒充用户当前登录到系统中。一旦我将该用户登录并在模拟该用户的同时重试该命令,我会得到上述错误。

这是怎么回事?

回答

0

我对特定问题无能为力,但我确实知道,如果我必须在Windows上使用WMI工作,那么我肯定会使用Tim Golden的Python WMI模块而不是pywin32。也许在文档/食谱或谷歌搜索使用该模块,你可以找到一个解决方案。