Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用AddPrinterDriver-winspool.drv时出现故障_C#_Windows_Driver_Win32 Process - Fatal编程技术网

C# 调用AddPrinterDriver-winspool.drv时出现故障

C# 调用AddPrinterDriver-winspool.drv时出现故障,c#,windows,driver,win32-process,C#,Windows,Driver,Win32 Process,我正在尝试使用c#创建一个虚拟打印机,带有winspool.drv中的一些绑定功能,我已成功地将打印机安装到windows 7 64位中,但每当我尝试在32位计算机上安装时,win32总是导致错误代码216 我决定借用我朋友的电脑,里面有10台32位处理器的电脑,只有一台可以安装打印机驱动程序 调用AddPrinterDriver方法时出错。这是我的代码: [DllImport("winspool.drv", EntryPoint = "AddPrinterDriver", CharSet =

我正在尝试使用c#创建一个虚拟打印机,带有winspool.drv中的一些绑定功能,我已成功地将打印机安装到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或Windows NT x86。然后以管理员权限运行,等等

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

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

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

你研究过错误216是什么意思吗?它告诉了你什么?为什么你没有在你的问题中包括实际的win32错误细节?C#打印机驱动程序的概念是一个非常模糊的概念。传统的错误是通过更改解决方案平台名称来选择最终DLL的所需风格。这对C#项目来说根本不起作用,重要的是抖动强制。项目>属性>构建选项卡。您好@HansPassant,谢谢您的回答。但是,我已经将目标平台从Build tab标记为x86,问题仍然存在。@ThiềuQuangCường您是否有在32位操作系统上运行它的解决方案,我也面临同样的问题,请分享