次のような行が上記の例外をスローしました。
PrintServer ps = new PrintServer(@"\\prntsrv");
Windows で「実行...」を使用すると、上記のアドレスが機能し、印刷ジョブのリストが表示されるのに、コード行が機能しないのはなぜですか?
次のような行が上記の例外をスローしました。
PrintServer ps = new PrintServer(@"\\prntsrv");
Windows で「実行...」を使用すると、上記のアドレスが機能し、印刷ジョブのリストが表示されるのに、コード行が機能しないのはなぜですか?
どうやら、アドレス\\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;
}
}
ねえ、私は同様の問題に直面していました。これは私が観察し、次の変更を加えたものです。
この問題は、Windows の機能/役割「印刷およびドキュメント サービス」がシステムにないために発生していました。この役割は、複数のプリンターまたはプリント サーバーを管理し、他の Windows サーバーとの間でプリンターを移行するために必要です。
ロールを追加するには、[コントロール パネル] -> [Windows 機能の有効化または無効化] -> [印刷とドキュメント サービス] チェック ボックスをクリックします -> [インストール] に移動します。
追加できない場合は、このルールのインストールについてネットワーク管理者に相談してください。
ロールを追加すると、プリント サーバー オブジェクトを作成し、それぞれのサーバーのすべてのプリントキューを取得できます。