我有一个 C# 程序,它执行一些命令来生成 PDF 并将其打印到打印机。打印机托管在打印服务器中,因此我访问打印机的方式是通过我的应用程序配置。(\打印服务器名称\打印机名称)
<add key="printServerPrinter" value="\\APPS-UATSVR\NPIFBCC54 (HP LaserJet MFP M430)"/>
当我在 Visual Studio 上运行该程序时,或者当我发布它并通过其 .exe 文件运行时,该程序都可以正常工作。它必须在工作时间运行,因此我将其添加到任务计划程序中,以便启动它每分钟检查某些内容,并在发现某些内容时进行打印。
问题是,如果程序由任务计划程序启动,它找不到打印机,它会生成 PDF,但无法将其发送到打印机上打印,因为它找不到它。这是记录在 .txt 文件上的错误。
2023-07-26 06:32:43:751191 Function:Main - Message:The printer named "\\APPS-UATSVR\NPIFBCC54 (HP LaserJet MFP M430)" could not be opened. Error code: 0
如果我正常启动它,就不会出现问题,就像我之前说的。我在网上搜索过,但找不到答案,我似乎无法调试这个问题。我尝试了很多方法,更改了打印机名称,更改了端口,将反斜杠改为正斜杠,但仍然不起作用。
问题出在哪里?提前谢谢您!
答案1
除非您明确告知它使用用户帐户,否则当任务计划程序启动应用程序时,它将在Local Service
安全上下文中启动它。由于您的打印机尚未添加到该安全上下文中,因此任务无法访问它 - 并且无论如何从该上下文访问任何网络资源都可能存在一些问题。编辑您的计划任务以使用您的用户帐户,它将需要您的密码才能访问您的网络资源。