数年前、別の賢いプログラマーが、サーバーにインストールされているプリンターの1つに印刷するためにVB.NETサービスをセットアップしました。このジョブは、データベーステーブルにクエリを実行して、印刷するファイルと送信先のプリンターの名前を指定する印刷要求があるかどうかを確認しました。このジョブは、3つの部分からなるコマンドラインの呪文を作成して実行します。それはこのように少しなります:
net use LPT2: IP_1.2.3.4 /user:domain\userid password >> netuse1.out
copy someExistingFile.pdf LPT2 >> copy.out
net use LPT2: /delete >> netuse2.out
私たちはこの仕事に他の無関係な変更を加えるように頼まれ、喜んで応じました。デプロイして実行するジョブのバージョンのみが印刷されません。最初のステートメントは「システムエラー67が発生しました。ネットワーク名が見つかりません。」で失敗します。
ジョブはレジストリを照会して、ユーザーが指定したプリンターのポート名を見つけました。試行するポートは、実際、プリンタのプロパティを確認したときに表示されるポートの「名前」です。そうです、ええと、正しいです。
ちょっと待ってください。一体何が「ポート名」ですか?これは有効なIPアドレスではありません(ただし、接頭辞「IP_」が付いたプリンタ自体のIPアドレスです。NETUSEで見つけることができるものは、プリンタポートについて何も述べておらず、コンピュータ/共有[およびオプションのボリューム]のみです。
これがこれまでに機能した可能性があるかどうかについて、誰かが何か光を当てることができますか?
[もちろん、実際にまだ機能しているバージョンのサービスのソースを提供することはできません。サービスのこの部分には触れていません。この印刷の前にある部分だけに触れています。そして、クライアントは彼らもそうではないと誓います。Grrr ...]
サービスとして実行する必要があるという事実は事態を複雑にしますが、私たちはより現代的な印刷方法を検討しています。