为什么 16 位 DOS 程序无法打印到网络共享

为什么 16 位 DOS 程序无法打印到网络共享

我有一个 DOS 应用程序(在终端服务上运行,Win Server 2008 Standard 6.06002 SP2)。我需要打印到我电脑上的共享打印机。net use lpt2: \\mycomputer\myprn当我“复制 file.txt lpt2”时,它运行正常。当我的应用程序打印时,它显示未找到打印机。DOS 应用程序指向 lpt2 并使用 hppcl。当 DOS 应用程序驻留在我的计算机(Win7x32)上时,我能够打印到我自己的打印机。有什么线索吗?

答案1

兄弟,我很抱歉。我经历过这种事。

当您执行 时打印机会出现吗net use

我能够使用学生实验室中糟糕的 16 位 DOS 程序进行打印net use lpt2 \\servername\printer。我还得到了一个糟糕的程序,它不接受 jetdirect/TCPIP 打印机端口,但是做过通过将打印机共享为\\127.0.0.1\printername$并打印到该打印机来接受网络共享进行打印。换句话说:确保打印机确实显示为net use,确保本地打印机是共享(仅对您的本地用户,除非您真的想在可怕的 16 位程序范围之外共享它,并且如果您用 $ 命名它将被隐藏),并\\127.0.0.1在必要时用作服务器。

祝你好运!

答案2

太多人将“字符”或“控制台”模式应用程序与“DOS”混淆。如果您在 Server 2008R2 上运行“DOS”应用程序,则您可能拥有的是 32 位字符应用程序。

如果它是一个 16 位 DOS 应用程序,您将无法在 64 位的 Server2008R2 上运行它,并且它唯一知道如何对 16 位应用程序执行的操作就是引发错误。

现在,如果该应用程序尝试使用 16 位打印例程,坏消息是它将无法工作,至少在应用程序在 Server 2008R2 上运行时无法工作。

答案3

由于某些制造软件,我实际上有一个类似的设置......

常见的罪魁祸首是应用程序希望打印机在本地计算机的列表中。另一个罪魁祸首是应用程序希望打印机有一个非常具体的名称,否则它将找不到它。如果不了解软件,很难确切地说出问题是什么,但我建议首先将共享打印机添加到您的 TS 服务器并为其命名确切地它在您的本地机器上是如何的-然后尝试使用lpt端口设置进行打印。

答案4

我可以推荐一种替代方案,我们公司使用这种方案从广泛使用的 16 位 DOS 程序进行打印:AND Technologies 的免费 DOSPrint 应用程序在过去十年中一直为我们服务。虽然它是闭源的,但它只有 63KB,作为系统范围的服务或每个用户托盘应用程序运行,将 LPT 流从 DOS 子系统重定向到任何 Windows 打印队列(包括共享打印机),并且具有自由许可证(“免费供一般使用,无限制”)。查看他们的下载/免费软件链接。

另一种选择——如果您有任何编程经验——是编写自己的简单 LPT 到任何重定向器。在 .NET 中,您将使用 P/Invoke 调用 QueryDosDevice 和 DefineDosDevice 将 LPT 从任何 DOS 应用程序重定向到文件或命名管道:

<DllImport("kernel.dll", CharSet:=CharSet.Unicode, entrypoint:="DefineDosDeviceW")>
Public Shared Function DefineDosDevice(ByVal dwFlags As UInt32, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Boolean
End Function

相关内容