IIS中asp.net程序后台打印水晶报表 程序假死或打印机无反应的解决方法

时间:2024-03-12 08:28:27

      最近在做的几个项目都用到了水晶报表的后台打印,调试的时候非常好用,无论是虚拟打印还是指定真实打印机,可一部署到IIS上就莫名其妙的卡死,或者提示了打印成功,打印机却毫无反应。

      一开始认为是权限的问题,把C:/windows/temp和程序所在文件夹都加上了相应权限,甚至连部署的打印机都设置了很多权限,还是不能解决。

     在网上找来找去,也都是一些提醒是否权限正确,或者打印模板路径是否正确的答案。

     后来,仔细观察了调试打印和IIS打印时打印机任务中的信息,发现调试时打印,“文档所有者”指示的是administrator,而IIS打印时其指示的是 机器名+“$” 这样一个东西。我又观察了一下进程中虚拟打印机的调用,进程中虚拟打印机的程序对应的用户名在调试时用的是administrator,而IIS打印时用的是\'network service\'。看到这,有点明白问题的原因了,应该是“标识”,对,就是IIS应用程序池的“标识”,其默认的是’networkservice‘ ,而我将他改成管理员也就是‘administrator’后,一切就解决了,下图:

具体原因,我想应该是内置账户不允许使用本地打印机的原因吧,也希望有高人给出更明确的解释。

这里要提一下,修改‘标识’会引起一些安全问题,而且微软建议我们使用内置用户\'network service\',不过在对安全不是特别重视的情况下(我们这系统就只在局域网使用),实现功能还是第一位的,毕竟如果换成前台打印在一些打印机控制和客户环境上还需要很多设置。