在本地发布网站(应用程序)后,网络打印机无法访问

时间:2014-01-08 04:23:55

标签: c# asp.net iis printing

以下是我使用的示例代码:

System.Management.ManagementScope objMS =
            new System.Management.ManagementScope(ManagementPath.DefaultPath);
            objMS.Connect();
            SelectQuery objQuery = new SelectQuery("SELECT * FROM Win32_Printer");
            ManagementObjectSearcher objMOS = new ManagementObjectSearcher(objMS, objQuery);
            System.Management.ManagementObjectCollection objMOC = objMOS.Get();
            foreach (ManagementObject Printers in objMOC)
            {
                if (Convert.ToBoolean(Printers["Local"]))       // LOCAL PRINTERS.
                {
                    cmbLocalPrinters.Items.Add(new ListItem(Printers["Name"].ToString()));
                }
                if (Convert.ToBoolean(Printers["Network"]))     // ALL NETWORK PRINTERS.
                {
                    cmbNetworkPrinters.Items.Add(new ListItem(Printers["Name"].ToString()));
                }
            }

当我通过Visual Studio IDE运行我的应用程序时,我可以使用我的代码查看所有打印机(包括网络打印机)。但是当我在本地计算机上发布此应用程序(使用Build - > Publish Websites)时(同样)我正在开发我的应用程序),我只得到我的电脑上安装的本地打印机(没有网络打印机)

1 个答案:

答案 0 :(得分:0)

如果你需要避免“身份冒充”,你仍然可以用这个漂亮的技巧来做。您必须将服务器上的打印机添加为本地打印机,并将端口指向打印机的IP地址(或域)。

在Windows Server 2003上:

  • 运行“添加新打印机”向导
  • 选择新打印机作为“连接到此计算机的本地打印机”
  • 选择端口时,选择“创建新端口”选项
  • 对于Port of Type,选择“Local Port”
  • 在“输入端口名称”框中,输入打印机的IP地址或完整的域名和打印机名称(例如:\\ myDomain \ HP LaserJet 2800xh)
  • 如果提示共享打印机,请确保您不共享它

就是这样!

然后像往常一样运行你的代码,Bham!您可以使用网络打印机了!

System.Management.ObjectQuery oquery = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
System.Management.ManagementObjectSearcher mosearcher = new System.Management.ManagementObjectSearcher(oquery);
System.Management.ManagementObjectCollection moc = mosearcher.Get();

foreach (ManagementObject mo in moc)
{
    System.Management.PropertyDataCollection pdc = mo.Properties;
    foreach (System.Management.PropertyData pd in pdc)
    {
        if ((bool)mo["Network"])
        {
            cmbNetworkPrinters.Items.Add(mo[pd.Name].ToString());
        }
        if ((bool)mo["Local"])
        {
            cmbLocalPrinters.Items.Add(mo[pd.Name].ToString());
        }
    }
}