1

次のような行が上記の例外をスローしました。

PrintServer ps = new PrintServer(@"\\prntsrv");

Windows で「実行...」を使用すると、上記のアドレスが機能し、印刷ジョブのリストが表示されるのに、コード行が機能しないのはなぜですか?

4

2 に答える 2

0

どうやら、アドレス\\prntsrvは DNS エイリアスで\\prntservあり、PrintServerコンストラクターはそれを処理できませんでした。この問題を回避するために、次のコードを使用しました (代わりに catch ブロック内のコードのみを使用することもできますが、それは機能しますが、使用しないことをお勧めします)。

        try
        {
            // Create object to monitor the printer queue
            PrintServer printServer = new PrintServer(serverPath);
            mPrintQueue = printServer.GetPrintQueue(printerName);
        }
        catch (PrintServerException ex)
        {
            // If the problem might be creating the server because the name is an alias
            if (ex.Message.Contains("printer name is invalid."))
            {
                string actualServerHostname = "\\\\" + Dns.GetHostEntry(serverPath.TrimStart('\\')).HostName;

                // Create object to monitor the printer queue
                PrintServer printServer = new PrintServer(actualServerHostname);
                mPrintQueue = printServer.GetPrintQueue(printerName);

                // Write to log about the use of a different address
            }
            else
            {
                throw;
            }
        }
于 2013-04-28T10:48:20.953 に答える
0

ねえ、私は同様の問題に直面していました。これは私が観察し、次の変更を加えたものです。

この問題は、Windows の機能/役割「印刷およびドキュメント サービス」がシステムにないために発生していました。この役割は、複数のプリンターまたはプリント サーバーを管理し、他の Windows サーバーとの間でプリンターを移行するために必要です。

ロールを追加するには、[コントロール パネル] -> [Windows 機能の有効化または無効化] -> [印刷とドキュメント サービス] チェック ボックスをクリックします -> [インストール] に移動します。

追加できない場合は、このルールのインストールについてネットワーク管理者に相談してください。

ロールを追加すると、プリント サーバー オブジェクトを作成し、それぞれのサーバーのすべてのプリントキューを取得できます。

于 2014-04-10T07:17:35.693 に答える