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



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

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

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

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],但你可以随心所欲。

创建端口后,我会"安装"打印机。这并不是真正的安装,因为驱动程序需要已经安装在服务器上,但这对我来说很有效

最新更新