c# - 从 IIS 打印无法在作为本地 asp.net 连接的共享打印机上工作
问题描述
我正在尝试使用带有以下代码的 asp.net 进行打印
string s = "string to print";
PrintDocument p = new PrintDocument();
p.PrintPage += delegate(object sender1, PrintPageEventArgs e1)
{
e1.Graphics.DrawString(s, new Font("Times New Roman", 12), new
SolidBrush(Color.Black), new RectangleF(0, 0,
p.DefaultPageSettings.PrintableArea.Width,
p.DefaultPageSettings.PrintableArea.Height));
};
try
{
p.Print();
}
catch (Exception ex)
{
throw new Exception("Exception Occured While Printing", ex);
}
此代码运行成功,但未打印任何内容,打印机中的状态始终为“错误打印”。但它在我的 IP 打印机上工作。
我将管理员帐户分配给应用程序池。
我的环境是 Server2008,IIS 7,.Net 4.0
解决方案
要使用从远程计算机共享的打印机,您的应用程序必须使用有权连接到远程计算机的帐户运行。远程计算机根本不关心您在托管 Web 服务器的本地工作站上拥有多少权限。这是一个完全不同的安全域*,因此本地站的管理员权限根本没有帮助。
要使其正常工作,您需要设置一个可以连接到远程共享的常规用户帐户。通常这也意味着更改打印机共享以明确支持新帐户。确保此帐户还具有本地打印机的权限以及您的 Web 应用程序需要执行的任何其他操作。不要依赖用户登录时发生的任何事情,例如映射驱动器,因为此帐户不会在正常意义上登录。然后将新帐户用于应用程序池。
* 除非两台机器都加入同一个 Active Directory 域,这样可以让事情变得更容易。
推荐阅读
- angular - 角度填充问题:IE11 - core-js v3.6.5 方法 es.string.split.js 在拆分时无法解析正则表达式 /^|\s+/
- android - Android - 类型与 LiveData 变量不匹配
- python - PyGame Snake 会随着窗口大小的增加而降低速度
- python - Discord Py - Heroku 托管 Bot 上的音乐命令
- php - 运行作曲家命令时有没有办法隐藏“资金”消息?
- c# - 使用流畅的断言可以将断言的结果附加到自定义记录器
- php - 如何对功能代码进行单元测试?(不是面向对象的)
- r - R - 预测多个时间序列(15K 产品)
- html - 使用 JQuery 将选项值设置为样式标记值
- javascript - 从外部 XML 实时更新网站上的文本