找回密码
 立即注册

QQ登录

只需一步,快速开始

sethashan

sethashan
注册会员   /  发表于:2015-7-3 10:06:00
11#
回复 10楼qakmak的帖子

权限检查过了,直接以本地系统的权限运行的。

其中也有模拟提升程序运行权限来运行,可是打印机还是没有反应,就是接受不到打印任务。
回复 使用道具 举报
qakmak
论坛元老   /  发表于:2015-7-3 14:02:00
12#
回复 11楼sethashan的帖子

我觉得winform打印或windows service打印就差了个GUI界面之外, 执行命令应该没什么区别的, 无非就是给打印机发送打印指令.
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-3 14:12:00
13#
您好,
非常抱歉。经过调查,我们发现在windows Service不支持打印的功能。

原因是,windows Service是一个后台进程,不能够支持前台UI的调用。

在打印时,会报错。
  1. System.Drawing.Printing.InvalidPrinterException: 未安装打印机。
  2.    在 GrapeCity.ActiveReports.Viewer.Win.Printing.PrintImpl.#kUo(Printer printer, Boolean showPrintDialog)
  3.    在 GrapeCity.ActiveReports.Viewer.Win.Printing.PrintImpl.Print(#q0B documentPrintAdapter, Boolean showPrintDialog, Boolean showPrintProgressDialog, Boolean usePrintingThread, Boolean useStandardDialog, Action`1 action)
  4.    在 GrapeCity.ActiveReports.PrintExtension.Print(PageDocument pageDocument, Boolean showPrintDialog, Boolean showPrintProgressDialog, Boolean usePrintingThread, Boolean useStandardDialog)
  5.    在 GrapeCity.ActiveReports.PrintExtension.Print(PageDocument pageDocument, Boolean showPrintDialog, Boolean showPrintProgressDialog)
复制代码
回复 使用道具 举报
qakmak
论坛元老   /  发表于:2015-7-3 23:43:00
14#
回复 13楼frank.zhang的帖子

打印需要调用UI? 这逻辑太奇怪了吧. 而且你那边显示的是未安装打印机错误呀.
即便是后台进程我觉得不应该被前台UI所限制. 希望问问国外的开发人员. 况且这是一个常用的功能. 总不能每台需要打印的电脑都装一个打印机吧. 所以逻辑上也说不过去.
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-6 17:34:00
15#
您好,
经过调查,系统在打印时,调用的是System.Drawing.Printing
在System.Drawing这个方法,有这么一句话
https://msdn.microsoft.com/en-us/library/system.drawing.aspx

Classes within the System.Drawing namespace are not supported for use within a Windows or ASP.NET service.

您可以参考下这篇文章
http://blogs.msdn.com/b/dsui_tea ... indows-service.aspx
回复 使用道具 举报
sethashan
注册会员   /  发表于:2015-7-7 09:54:00
16#
回复 15楼frank.zhang的帖子

斑竹,您的意思是ActiveReport的 Document.Print(false, false, false)方法实际上是把System.Drawing.Printing这个打印类的打印方法封装了而已?
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-7 14:05:00
17#
您好,
System.Drawing.Printing是.net framework所提供的系统方法。从目前的信息,打印时使用了这个方法。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-20 09:51:00
18#
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢

评分

参与人数 1满意度 +5 收起 理由
sethashan + 5 非常感谢版主,忘了评分了。

查看全部评分

回复 使用道具 举报
sethashan
注册会员   /  发表于:2015-12-9 14:03:00
19#
版主,目前该问题有了新的进展,麻烦跟进一下。

我用的是系统自带的虚拟打印机Microsoft XPS Document Writer,正常运行Windows服务,

日志显示程序一直卡在Document.Print(false, false, false)方法上。

然后我这里做了一个修改如图:(擦 不能上传本地的图,用文字描述了)

就是右击服务-属性-登录选项卡-本地系统账户下有个选项"允许服务与桌面交互",勾选它。

然后再运行服务,这时候任务栏出现一个齿轮图标,点击后弹出一个“交互服务监测”

询问我是否浏览交互信息,点击浏览信息,就会跳到一个虚拟桌面,其中有Microsoft XPS Document Writer打印机特有的

把打印数据保存成XPS文件的对话框。点击保存同时返回本机桌面,发现保存位置多了XPS文件,日志显示打印成功。

这里说明了windows Service虽然是一个后台进程,但是可以支持前台UI的调用,前提是勾选上述所说的允许服务与桌面交互。

但是本人有个疑问:虚拟打印机是否必须交互才能打印 真实打印机是否不需要交互 直接就可以打印 ?

如果我连的是真实打印机,是否不用勾选允许服务与桌面交互选项,直接windows Service就可以进行打印?

(请谅解本人没有真实打印机环境,不能证实这个结论,如果版主有真实打印机条件的话,可能的话帮忙验证下,谢谢!)
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-12-9 17:45:00
20#
您好,

之前尝试的时候,已经勾选了所说的允许服务与桌面交互。验证的结果是不行。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部