几年前,另一位聪明的程序员设置了一个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_”。我在NET USE上找不到任何关于打印机端口,只有计算机/共享[和可选卷]的内容。
任何人都可以了解这是否有效?
[当然,没有人能为我们提供实际仍然有效的服务版本的来源。我们没有触及这部分服务,只是在此打印之前。客户发誓他们也没有。哎呀...]
我们正在寻找一种更现代的打印方式,尽管它需要作为服务运行这一事实使事情变得复杂。
答案 0 :(得分:1)
“IP_1.2.3.4”参数是打印机共享名称,而不是端口名称。您必须共享一个已安装的现有打印机,并在过去的某个时间点为其命名为“IP_1.2.3.4”,并且此共享名称丢失。
如果您只需要一台直通式打印机,则可以安装“Generic / Text Only”打印机,将其分配到所需的端口,然后使用“net use”命令中的名称进行共享。