У меня есть приложение DOS (работающее в службах терминалов, Win Server 2008 Standard 6.06002 SP2). Мне нужно распечатать на моем общем принтере на моем компьютере. net use lpt2: \\mycomputer\myprn
. Когда я "копирую file.txt lpt2", он работает безупречно. Когда мое приложение печатает, оно показывает, что принтер не найден. Приложение DOS указывает на lpt2 и использует hppcl. Я мог печатать на собственном принтере, когда приложение DOS находилось на моем компьютере (Win7x32). Какие-нибудь подсказки?
Чувак, извини. Был там, сделал это.
Появляется ли принтер, когда вы делаете net use
?
Я смог получить ужасную 16-битную программу DOS в студенческой лаборатории для печати с net use lpt2 \\servername\printer
. Я также получил ужасную программу, которая не принимала порты принтера Jetdirect / TCPIP, но сделал разрешить сетевые ресурсы для печати, предоставив общий доступ к принтеру как \\127.0.0.1\printername$
и печать к этому. Другими словами: убедитесь, что принтер действительно отображается с net use
, убедитесь, что локальный принтер общий (только для вашего локального пользователя, если вы действительно не хотите делиться им за пределами вашей ужасной 16-битной программы, и если вы назовете ее с помощью $, она будет скрыта) и используйте \\127.0.0.1
как сервер, если нужно.
Удачи!
Слишком много людей путают приложение "символьного" или "консольного" режима с "DOS". Если у вас есть приложение "DOS", работающее на Server 2008R2, то, вероятно, у вас есть 32-битное символьное приложение.
Если бы это было 16-битное приложение DOS, вы не смогли бы запустить его на Server2008R2, который является 64-битным, и единственное, что он знает, что делать с 16-битными приложениями, - это выдавать ошибку.
Теперь, если это приложение пытается использовать 16-битные процедуры печати, плохая новость заключается в том, что оно не будет работать, по крайней мере, пока приложение работает на Server 2008R2.
На самом деле у меня похожая установка из-за определенного производственного программного обеспечения ...
Обычно виновником является то, что приложения ожидают, что принтер будет в списке локального компьютера. Другая причина заключается в том, что приложение ожидает, что принтер будет иметь очень конкретное имя, иначе оно не найдет его. Не зная программного обеспечения, трудно точно сказать, в чем проблема, но я бы начал с добавления общего принтера к вашему серверу TS и присвоения ему имени. именно как это происходит на вашем локальном компьютере - затем попробуйте распечатать, используя настройку порта lpt.
Я могу предложить альтернативу, которую мы используем для печати из широко используемой 16-битной программы DOS в моей компании: A.N.D. Бесплатное приложение DOSPrint от технологий отлично работало у нас последние десять лет. Несмотря на то, что исходный код закрыт, он составляет всего 63 КБ, работает как общесистемная служба или приложение для каждого пользователя, перенаправляет поток LPT из подсистемы DOS в любую очередь печати Windows, включая общие принтеры, и имеет либеральную лицензию («бесплатно для общего использования. без ограничений »). Проверьте их ссылку Downloads / Free Software.
Другой вариант - если у вас есть опыт программирования - это написать собственный тривиальный перенаправитель LPT-to-any. В .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