0

PyWin32 を使用して、django Web アプリケーションから Python でシステムへの WMI 呼び出しを行っています。私の目標は、ユーザーが Web インターフェイス経由でシステムにプリンターを追加できるようにすることです。これを行うために、win32print.AddPrinterConnection を使用しています。

これは、私のユーザーアカウントで開発サーバーを実行するとうまくいきます。必要なすべてのプリンターを追加できます。ただし、最終的には、これは LocalSystem アカウントとして実行される apache の下で実行する必要があります。

これには、次の 2 つの理由で問題があります。

  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

特定の問題を解決することはできませんが、Python を使用して Windows で WMI を使用する必要がある場合、pywin32 ではなくTim Golden のPython WMIモジュールを使用することは間違いありません。おそらく、そのモジュールを使用したドキュメント/クックブックまたはGoogle検索で解決策を見つけることができます。

于 2009-12-04T03:47:13.457 に答える