Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过在Windows服务中执行进程进行打印_C#_.net_Printing_Windows Services - Fatal编程技术网

C# 通过在Windows服务中执行进程进行打印

C# 通过在Windows服务中执行进程进行打印,c#,.net,printing,windows-services,C#,.net,Printing,Windows Services,我有一个Windows服务,需要启动一个进程将文件发送到打印机(我在那里找到了解决方案)。我使用Process.Start()执行此操作。 我的问题是什么也没发生 该服务实际上安装在我的开发人员计算机(win7,x64)上。我试着把它安装成本地系统、网络服务、本地服务,每次的效果都是一样的 我尝试了以下方法开始我的流程: Process p = new Process(); p.StartInfo.FileName = "C:\\Program Files (x86)\\Foxit Softw

我有一个Windows服务,需要启动一个进程将文件发送到打印机(我在那里找到了解决方案)。我使用Process.Start()执行此操作。 我的问题是什么也没发生

该服务实际上安装在我的开发人员计算机(win7,x64)上。我试着把它安装成本地系统、网络服务、本地服务,每次的效果都是一样的

我尝试了以下方法开始我的流程:

Process p = new  Process();
p.StartInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe";
p.StartInfo.Arguments = "-p myFile.pdf";
p.Start();

Process.Start("C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe", "-p myFile.pdf");
而且

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe";
startInfo.Arguments = "-p myFile.pdf";

Process.Start(startInfo);
当我在winform应用程序中执行相同的代码时,一切正常,文件被发送到打印机。但是在Windows服务中,什么也没有发生

我看到了那篇文章,这解释了为什么我看不到UI,没关系,反正我没有任何UI。但正如评论部分所说,没有用户输入的流程应该可以。我启动的进程不需要任何用户输入

我现在唯一能想到的是,由于会话隔离(),服务找不到任何已安装的打印机。。。是这样吗?如果是,有什么建议可以解决这个问题吗?如果没有,你知道怎么了吗

谢谢

编辑#1

我试着用我的用户帐户运行这项服务,它正在运行,所以我想我的担心得到了证实。。。用户本地系统和网络服务没有安装打印机

因此,我将对我的问题进行一点改进。这些帐户是否有办法访问计算机上安装的打印机

编辑#2

我们最终决定创建一个用户来运行该服务,并在该用户帐户中安装要打印的打印机

我想这个问题现在可以结束了。
谢谢大家的帮助。

查看此MSDN页面:


根据此页面,您不能使用.NET从ASP.NET页面或Windows服务打印

这里的解决方案是共享您的本地打印机,并与Foxit联系

-/t yourfile.pdf\\localhost\yourSharedInter


这样,您的服务就不需要用户配置文件和默认打印机。

我也遇到了这个问题,这个技巧解决了这个问题

转到服务--->双击所需服务--->继续登录选项卡

提供安装打印机的登录凭据

运行服务,然后检查打印机队列

原因:本地系统帐户没有安装这些打印机


请参阅下面的屏幕截图。

这可能是因为应用程序正在尝试显示打印对话框,但会话是非交互式的(请查看应用程序事件日志),也可能是因为服务运行时的用户未配置打印机。您可以以服务运行的用户身份登录(如果可能)并配置打印机。当我在winform应用程序中执行完全相同的代码时,文件会在没有“打印”对话框的情况下发送到打印机,因此我希望服务也会有同样的行为。我将尝试与您建议的类似的方法,并使用我的用户帐户运行该服务,然后看看它是否能正常工作。谢谢,myFile.pdf在哪里?该服务是否可以访问该路径?是的,我刚刚测试了该文件所在文件夹上帐户网络服务的完全控制权限,但没有成功。谢谢你的建议。这不能用Windows服务来完成。谢谢你的链接,但我认为这不适用于我的情况。我没有使用.NETFramework打印类进行打印。我正在启动一个.exe,它接受一个参数,告诉他打印文档。