调用AddPrinterDriver-winspool.drv时出现问题



我正试图使用带有winspool.drv绑定功能的c#创建一台虚拟打印机,我已经成功地将打印机安装到了我的windows 7 64位中,但每当我尝试在32位机器上安装时,win32总是会导致错误代码216。

我决定借用我朋友的电脑,里面有10台32位处理器的电脑,只有一台可以安装打印机驱动程序。

当我调用AddPrinterDriver方法时发生了错误。这是我的代码:

[DllImport("winspool.drv", EntryPoint = "AddPrinterDriver", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool AddPrinterDriver(String pName, int Level, ref DRIVER_INFO_6 pDriverInfo);

用调用它的代码

private bool InstallPrinterDriver(ref DRIVER_INFO_6 printerDriverInfo)
{
bool printerDriverInstalled = false;
printerDriverInstalled = NativeMethods.AddPrinterDriver(null, 6, ref printerDriverInfo);
if (printerDriverInstalled == false)
{
//int lastWinError = Marshal.GetLastWin32Error();
//throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not add printer Zody PDF printer driver.");
logEventSource.TraceEvent(TraceEventType.Error,
(int)TraceEventType.Error,
"Could not add Zody PDF printer driver. " +
String.Format(WIN32ERROR, Marshal.GetLastWin32Error().ToString()));
Console.Write("n" + String.Format(WIN32ERROR, Marshal.GetLastWin32Error().ToString()));
Console.Write("n"+printerDriverInfo);
}
return printerDriverInstalled;
}

结果总是失败,错误代码为216,即使我尝试了很多方法,比如更改pEnvironment=null或WindowsNTx86。然后以管理员权限运行,依此类推。

更新:错误216的解释:此版本的%1与您运行的Windows版本不兼容。请检查计算机的系统信息,然后与软件发行商联系。->这意味着我可以在32位程序上运行64位程序。但是,我非常确信这个包是在Visual studio 2015的32位(x86(机器的目标上构建的。

造成这种情况的根本原因是您的计算机中有一个现有库,并且您正在尝试添加一个新库。有两个选项,要么你通过编码忽略这个错误并继续正常安装应用程序,要么你应该删除这个目录中的所有内容:

C:WindowsSystem32spooldriversW32X863

最新更新