【问题标题】:Code to install a printer driver works on Windows 7 but not Windows 8安装打印机驱动程序的代码适用于 Windows 7,但不适用于 Windows 8
【发布时间】:2014-09-01 19:05:06
【问题描述】:

我尝试使用此 C# 代码将打印机和打印机驱动程序添加到 Windows。它适用于 Windows 7,但不适用于 Windows 8。代码调用 moPrinter.Put() 时发生异常(一般故障)。谁能说出为什么在运行 Windows 8 时会遇到此错误,而为什么不是 Windows 7?

    public static bool AddCanonPrinter()
    {
        bool flag = true;
        try
        {
            String portNumber = "9100";
            String printerIP = "157.198.192.42";
            String portName = "IP_" + printerIP;
            ConnectionOptions options = new ConnectionOptions();
            options.EnablePrivileges = true;
            ManagementScope mscope = new ManagementScope(ManagementPath.DefaultPath, options);
            mscope.Connect();

            ManagementPath mpPort = new ManagementPath("Win32_TCPIPPrinterPort");
            ManagementClass mcPort = new ManagementClass(mscope, mpPort, new ObjectGetOptions());
            ManagementObject moPort = mcPort.CreateInstance();
            moPort.Properties["Name"].Value = portName;
            moPort.Properties["HostAddress"].Value = printerIP;
            moPort.Properties["PortNumber"].Value = portNumber;
            moPort.Properties["Protocol"].Value = 1;
            moPort.Put();

            ManagementPath mpPrinter = new System.Management.ManagementPath("Win32_Printer");
            ManagementClass mcPrinter = new ManagementClass(mscope, mpPrinter, new ObjectGetOptions());
            ManagementObject moPrinter = mcPrinter.CreateInstance();
            moPrinter.Properties["Name"].Value = "Canon";
            moPrinter.Properties["DeviceID"].Value = "Canon";
            moPrinter.Properties["DriverName"].Value = "Canon iR C2880/C3380";
            moPrinter.Properties["PortName"].Value = portName;
            moPrinter.Properties["Network"].Value = true;
            moPrinter.Properties["Shared"].Value = false;
            moPrinter.Put();
        }
        catch
        {
            int msgCode = Marshal.GetLastWin32Error();
            string msg = GetSystemMessage(msgCode);
            flag = false;

        }

        return flag;
    }

【问题讨论】:

    标签: c# printing windows-8 drivers


    【解决方案1】:

    其实在我调查问题后,我发现windows 8中的打印机驱动程序名称不同。所以相同的代码可以在windows 8中使用并成功运行。

    【讨论】:

    • 有没有办法通过代码或文件系统中的任何位置检索可用的打印机驱动程序名称?
    • 是的。打印机驱动程序列表存储在注册表的 SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3 中。 (对于 32 位驱动程序,将 windows x64 替换为 windows x86)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2015-01-12
    • 2013-11-04
    • 2012-02-11
    相关资源
    最近更新 更多