调用 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
我正在尝试使用带有 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