在服务器上通过C#添加打印机

时间:2015-02-17 17:44:21

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

我想通过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)。

有人知道为什么吗? 该程序似乎运行,但没有添加打印机。 我没有例外。

1 个答案:

答案 0 :(得分:2)

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

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 of printer]但你可以随心所欲地制作它。

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