【发布时间】:2019-02-08 12:09:08
【问题描述】:
我有一个窗口服务,用于执行各种工作,其中一个是打印通过 WPF 生成的文档。运行控制台应用程序时,它工作正常,但从 Windows 服务运行时,它只是挂起。
让我稍微解释一下窗口服务。为了尽量减少任何可能的副作用,Windows 服务只是实际控制台的包装器。因此,当 Window Service 启动时(在它的 start 方法中),有一个简单的 Process.Start 调用来调用控制台,如下所示:
Process.Start("[path_to_my_console_exe]");
现在,当调用打印代码时,它只是挂起。我正在使用PrintDialog API 打印文档。打印文档的调用很简单:
var printDialog = new PrintDialog();
printDialog.PrintDocument(doc.DocumentPaginator);
当 PrintDocument 被命中时,它会阻塞执行(方法永远不会结束)。
所以,我做了一些调查。谷歌搜索给了我一些提示,所以
- 我确保 Windows 服务以与独立控制台相同的权限运行。
- 我确保 Windows 服务作为 x64 进程运行,与独立控制台相同
- 我尝试调试 PrintDialog.PrintDocument 方法。我从referencesource字面上下载了代码,它给了我一个新的见解,但不幸的是,这也没有解决问题,它只是进一步指出了哪个方法阻止了执行(它是 XpsDocumentWriter.Writer 方法,第 460 行) .
现在,在这一切之后,我确信它一定是关于权限的。尽管 Windows 服务使用同一用户作为独立控制台应用程序(管理员用户)运行,但在我看来,它仍然没有所需的所有权限。这里的 Windows 服务有什么特别之处吗?我是否遗漏了什么,在运行控制台之前还应该为 Windows 服务设置什么?
【问题讨论】:
标签: c# windows-services