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

Trouble when call AddPrinterDriver - winspool.drv

我正在尝试使用带有 winspool.drv 的一些绑定函数的 c# 创建虚拟打印机,我已成功将打印机安装到我的 windows 7 64 位,但 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;
}

结果总是失败,错误代码为 216,即使我尝试了很多方法,例如更改 pEnvironment = null 或 Windows NT x86。然后 运行 具有管理员权限等等。

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

根本原因是您的计算机中已有一个库,而您正在尝试添加一个新库。 有 2 个选项,要么通过编码忽略此错误并继续正常安装应用程序,要么删除此目录中的所有内容:

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