从Windows 2008 Server中的16位应用程序打印时出错

从Windows 2008 Server中的16位应用程序打印时出错,windows,printing,windows-server-2008,Windows,Printing,Windows Server 2008,我在Windows2008Server中运行一堆旧的16位应用程序时遇到问题。 这些应用程序在Windows2003Server之前运行良好,但是当我尝试从任何一个 它们都显示打印错误(无法创建打印机驱动程序/术语错误/etc) LPT1端口通过NET USE LPT1\ServerName\SharedPrinter重定向到共享打印机 DIR>LPT1(或任何指向打印机的shell重定向)工作正常 我使用的是管理员帐户,所以这不应该是权限问题,对吗 为了重现这种行为,我用C语言编写了一个小

我在Windows2008Server中运行一堆旧的16位应用程序时遇到问题。 这些应用程序在Windows2003Server之前运行良好,但是当我尝试从任何一个 它们都显示打印错误(无法创建打印机驱动程序/术语错误/etc)

  • LPT1端口通过NET USE LPT1\ServerName\SharedPrinter重定向到共享打印机
  • DIR>LPT1(或任何指向打印机的shell重定向)工作正常
  • 我使用的是管理员帐户,所以这不应该是权限问题,对吗
为了重现这种行为,我用C语言编写了一个小测试程序(TCC1.01用于DOS)。它运行良好 在XP/2003服务器上,但在2008服务器上,它显示句柄打开(5),但在尝试时 要写入该句柄,发出一个错误(写入错误错误写入设备LPT1、中止、重试、, 忽略,失败)

#包括
#包括
#包括
内部主(空)
{
int句柄,状态;
char*sbuff;
手柄=打开(“LPT1”,仅限O_WRK,S_IFBLK);
printf(“%d\n”,句柄);
如果(!句柄)
{
printf(“打开失败\n”);
出口(1);
}
sbuff=“[print test]\n”;
写入(句柄、sbuff、strlen(sbuff));
关闭(手柄);
getch();
返回0;
}
有什么线索吗

蒂亚,
Pablo

Mike A-我发现语法“print/d:{lpt?}{filename}”在Win2008上不起作用,在16位应用程序中或命令行中都不起作用。这种语法已经支持多年了,我们在10台Win2003服务器上运行它。Win2008中是否有配置设置,使其语法与以前版本的Windows兼容?顺便说一句,这里是2012年4月更新的Microsoft技术公告,其中列出了与Win2008兼容的语法

当编译为32位时,你的测试程序能正常工作吗?@Cameron:我没有试过,但这样做的意义何在?如果它能工作,我就无法重新编译所有旧的应用程序(在XP/2003服务器上运行良好),因为它们中的许多都来自第三方,我没有源代码。是的,但是你肯定知道这是一个奇怪的32/16位不兼容问题,还是与程序的位无关的其他问题。
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>

int main(void)
{
 int handle, status;
 char* sbuff;

 handle = open("LPT1", O_WRONLY, S_IFBLK);
 printf("%d\n", handle);

 if (!handle)
 {
    printf("open failed\n");
    exit(1);
 }

 sbuff = "[print test]\n";
 write(handle, sbuff, strlen(sbuff));

 close(handle);
 getch();

 return 0;
}