【问题标题】:Network printers cannot access after publishing website (application) locally网络打印机在本地发布网站(应用程序)后无法访问
【发布时间】:2014-01-08 04:23:54
【问题描述】:

这是我使用的示例代码:

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)时(在我正在开发我的应用程序),我只获得安装在我的 PC 上的本地打印机(没有获得网络打印机)

【问题讨论】:

  • 如果从 cmd 编译和运行程序会发生什么?是显示网络打印机还是本地打印机?
  • 我没有尝试通过 cmd 运行我的程序。
  • 试试看。如果从 cmd 运行后没有显示网络打印机,那么问题可能出在您的代码上。
  • 我点击此链接forums.asp.net/t/1292376.aspx 在发布应用程序后,我在 web.config 文件中设置了模拟标签。 使用这个我可以使用网络打印机,但在 CrystalReportViewer 中看不到报告。
  • 通过打印命令从水晶报表我可以打印。基本上水晶报表的打印命令打开一个弹出窗口并将所有内容转换为它。然后我可以保存pdf或打印它扔浏览器打印选项或 pdf 打印选项,所有本地和网络打印机都可用。为此,我不需要在发布后在 web.config 文件中添加模拟标签

标签: c# asp.net iis printing


【解决方案1】:

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

在 Windows Server 2003 上:

  • 运行“添加新打印机”向导
  • 选择新打印机作为“连接到此计算机的本地打印机”
  • 选择端口时,选择“创建新端口”选项
  • 对于端口类型,选择“本地端口”
  • 在“输入端口名称”框中,输入打印机的 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());
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2022-01-02
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多