【发布时间】:2019-01-08 20:12:37
【问题描述】:
我正在使用应用程序池标识(Windows 2016 服务器机器)在 IIS 上的 ASP.net 代码中查询 Win32_Printer。在其中一台服务器上,我收到拒绝访问错误。该代码在其他服务器上运行良好。我比较了两台服务器,但找不到权限差异。我需要向 IIS App Pool Identity 用户授予什么权限才能进行此调用?这是代码sn-p。
public static List<string> GetPrinterNames()
{
var query = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
var searcher = new System.Management.ManagementObjectSearcher(query);
var printerList = new List<string>();
foreach (var dummyPrinterObject in searcher.Get())
{
printerList.Add(dummyPrinterObject["DeviceID"] as string);
}
return printerList;
}
【问题讨论】:
-
您能否确认在其他服务器上应用程序池标识设置为
ApplicationPoolIdentity而不是其他自定义或预定义标识,例如LocalService -
这会将Web服务器的打印机列表返回给客户端。你确定要这样吗?
-
@Mohsin Mehmood,是的。身份设置为 ApplicationPoolIdentity。附带说明一下,将其设置为 LocalService 实际上会显示打印机。但我不想使用 LocaService。相反,我想授予 ApplicationPoolIdentity 或 IIS_USR 权限以查询打印机列表。
-
@ManojChoudhari,是的 Manoj。我们希望用户从列表中选择打印机并从服务器打印文档。