【发布时间】:2018-06-21 18:02:50
【问题描述】:
已解决 - 感谢史蒂夫。问题是我使用的 App Pool 使用的是默认的 App Pool Identity,它没有足够的权限。更改为使用具有足够权限的帐户的应用程序池解决了该问题。
我有一个简单的 C# 类来获取可用打印机的列表。从简单的控制台应用程序中调用时,它会返回本地定义的打印机(9 台打印机)的完整列表。当从 aspx web 应用程序中的代码调用时,它只返回默认打印机。 Web 应用程序以服务器上的本地管理员用户身份安装和运行,并且所有打印机都在该用户的配置文件中定义。
注意 - 我远程桌面到服务器并在那里运行控制台 exe 应用程序,它会显示所有打印机。我正在尝试获取服务器上定义的所有打印机的列表。
是否有一些我遗漏的安全问题?
类代码:
using System.Management;
/// <summary>
/// Returns a list of printers available on the current system.
/// </summary>
public static class PrinterList
{
public class Printer
{
public string name { get; set; }
public string server { get; set; }
public string location { get; set; }
public string portname { get; set; }
public string sharename { get; set; }
}
public static Printer[] GetInstalledPrinterList()
{
Printer[] printers = new Printer[0];
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * from Win32_Printer");
ManagementObjectCollection coll = searcher.Get();
foreach (ManagementObject printer in coll)
{
string name = printer.GetPropertyValue("Name").ToString();
if ((!name.ToLower().Contains("send to onenote")) &&
(!name.ToLower().Contains("xps document writer")) &&
(!name.ToLower().Contains("print to pdf")) &&
(!name.ToLower().Contains(" fax")) &&
(!name.ToLower().Equals("fax")))
{
string server = "";
if (printer.GetPropertyValue("ServerName") != null)
server = printer.GetPropertyValue("ServerName").ToString();
string location = "";
if (printer.GetPropertyValue("Location") != null)
location = printer.GetPropertyValue("Location").ToString();
string portname = "";
if (printer.GetPropertyValue("PortName") != null)
portname = printer.GetPropertyValue("PortName").ToString();
string sharename = "";
if (printer.GetPropertyValue("ShareName") != null)
sharename = printer.GetPropertyValue("ShareName").ToString();
Printer newPrinter = new Printer();
newPrinter.name = name;
newPrinter.server = server;
newPrinter.location = location;
newPrinter.portname = portname;
newPrinter.sharename = sharename;
Printer[] newlist = new Printer[printers.Length + 1];
for (int i = 0;i < printers.Length; i++)
{
newlist[i] = printers[i];
}
newlist[printers.Length] = newPrinter;
printers = newlist;
}
}
return printers;
}
}
【问题讨论】: