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

时间:2018-11-10 02:14:24

标签: c# windows driver win32-process

我正在尝试使用具有Winspool.drv中的某些绑定功能的c#创建虚拟打印机,我已经成功将打印机安装到Windows 7 64bits中,但是每当我尝试在Windows 7上安装时,win32总是会导致错误代码216 32位计算机。

我决定借用朋友的计算机,其中有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;
}

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

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

1 个答案:

答案 0 :(得分:0)

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

C:\Windows\System32\spool\drivers\W32X86\3