1

サーバー上に配置され、Web要求を受け入れてから、ユーザーとして特定のサーバー上の特定の印刷キューにジョブを印刷し、その資格情報がサービスに渡される単純なエンドポイントサービスをセットアップしようとしています。これは自動テスト用であるため、使用しているユーザーの権限は制限されているため、セキュリティは問題になりません。

なりすましなしでこのコードを試すと、次のようになります。

PrintServer ps = new PrintServer(@"\\" + serverName, PrintSystemDesiredAccess.EnumerateServer);
            response = "Created PrintServer object";
            foreach (PrintQueue pq in ps.GetPrintQueues())
            {
                response = response + "~@~" + pq.Name;
            }

正しく動作し、リモートサーバー上のプリンターのリストが表示されます。例:
作成されたPrintServerオブジェクト〜@〜Sc-4プルポート〜@〜MicrosoftXPSドキュメントライター

偽装して試してみると、代わりに次のようになります
。System.Printing.PrintServerException:PrintServerオブジェクトの作成中に例外が発生しました。Win32エラー:プリンター名が無効です。
System.Printing.PrintServer.Initialize(String path、String [] propertyFilter、PrinterDefaults printerDefaults)
at System.Printing.PrintServer..ctor(String path、PrintSystemDesiredAccessdesiredAccess)
at PrintService.PrintService.ImpersonatedInstalledPrinterList(String serverName、String userName、String userPassword、文字列ドメイン)

上記のエラーがスローされる理由を理解することも、オンラインで見つけることもできませんでした。有効なドメインアカウントを使用しており、使用しているユーザーにサーバー上の印刷キューへの完全なアクセス許可をテストすることもできます。偽装ユーザーとして印刷しようとすると同じエラーが発生します。偽装を実行していないときに印刷ジョブを送信しても問題はありません。

あなたが提供できるどんな助けにも感謝します、

4

1 に答える 1

0

使用しているコードに問題が見つかりました。問題は、偽装を使用しているときに使用していたことです。委任を使用する必要があるときに、偽装のSECURITY_IMPERSONATION_LEVELを使用していました。変更すると、エラーが消えました。

于 2012-08-14T12:39:02.273 に答える