【问题标题】:Add Printer via C# on Server [duplicate]在服务器上通过 C# 添加打印机 [重复]
【发布时间】:2015-02-17 17:44:21
【问题描述】:

我想通过 c# 将打印机添加到 windows。

我编写了以下方法:

public void AddPrinter(Model.Printer printer)
{
    var printerName = printer.Path;
    var managementScope = new ManagementScope(ManagementPath.DefaultPath);
    managementScope.Connect();

   var printerClass = new ManagementClass(new ManagementPath("Win32_Printer"), null);
   var inputParameters = printerClass.GetMethodParameters("AddPrinterConnection");

   inputParameters.SetPropertyValue("Name", printerName);
   printerClass.InvokeMethod("AddPrinterConnection", inputParameters, null);
}

这适用于 Windows 7/8 客户端,但不适用于服务器 (Windows 2008/2012)。

有人知道为什么吗? 该程序似乎在运行,但没有添加任何打印机。 我没有遇到异常。

【问题讨论】:

  • 使用 WMI Code Creator 实用程序编写 WMI 查询。它将帮助您不要忽略方法返回值。

标签: c# printing windows-server-2008 windows-server-2012


【解决方案1】:

当我从我的程序安装打印机时,我使用这样的代码

string printerIP = "10.200.49.230";
string portName = "IP_"+printerIP;
string serverName "printServer01";

PrintServer ps = new PrintServer(@"\\" + serverName);

ManagementClass printerPortClass = new ManagementClass("\\\\" + serverName + "\\root\\cimv2", "Win32_TCPIPPrinterPort", new ObjectGetOptions());
printerPortClass.Get();
var newPrinterPort = printerPortClass.CreateInstance();
newPrinterPort.SetPropertyValue("Name", portName);
newPrinterPort.SetPropertyValue("Protocol", 1);
newPrinterPort.SetPropertyValue("HostAddress", PrinterIP);
newPrinterPort.SetPropertyValue("PortNumber", 9100);
newPrinterPort.SetPropertyValue("SNMPEnabled", false);
newPrinterPort.Put();
//install printer
try
{
    ps.InstallPrintQueue(
        "PrinterName",
        "DriverName",
        new String[] { portName },    //port_name
        "WinPrint",
        PrintQueueAttributes.Shared,//set it to shared
        "Sharename",
        "This is a comment for the printer",
        "This is the printers location",
        "", 1, 1        //priorities
        );
}
catch (Exception printerException)
{
    //couldn't install printer
}

本质上,我使用 C# 中的 PrintServer 连接到打印服务器。我还使用 WMI 创建一个端口来设置打印机。在我的公司中,我们使用“IP_”+[打印机的 IP],但您可以随意制作。

创建端口后,我“安装”打印机。这不是真正的安装,因为驱动程序需要已经安装在服务器上,但这对我有用。

【讨论】:

  • 你自己做的?我需要添加参考吗?
  • PrintServer 类位于 System.Printing 中,ManagementClass 位于 System.Management 中,是的,您需要将它们添加为引用。
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多