我有一个Windows服务,需要启动一个过程来发送文件到打印机(我在那里找到解决方案/sf/answers/341302881/).我使用Process.Start()来做到这一点.我的问题是没有任何反应.
该服务实际上安装在我的开发人员计算机上(win7,x64).我尝试将其作为LOCAL SYSTEM,NETWORK SERVICE,LOCAL SERVICE安装,每次都有相同的结果.
我尝试了这种方式来启动我的过程:
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();
Run Code Online (Sandbox Code Playgroud)
和
Process.Start("C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe", "-p myFile.pdf");
Run Code Online (Sandbox Code Playgroud)
并且
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);
Run Code Online (Sandbox Code Playgroud)
当我在winform应用程序中执行相同的代码时,一切正常,文件被发送到打印机.但在Windows服务中,没有任何反应.
我看到了帖子/sf/answers/438991661/,这解释了为什么我不会看到用户界面,这很好我无论如何都没有任何用户界面.但正如评论部分所述,没有用户输入的过程应该没问题.我开始的过程不需要任何用户输入.
我现在唯一能想到的是,由于会话隔离(/sf/answers/354462531/),该服务无法找到任何已安装的打印机......可以是这种情况吗?如果是这样,任何建议如何解决?如果没有,任何错误的想法?
谢谢!
编辑#1
我尝试用我的用户帐户运行该服务,它正在运行,所以我猜我的担心得到了确认......用户LOCAL SYSTEM和NETWORK SERVICE没有安装打印机.
所以我会稍微改进一下我的问题.这些帐户有没有办法访问计算机上安装的打印机?
编辑#2
我们最终决定创建一个用户来运行该服务,在该用户帐户中我们将安装要打印的打印机.
我想这个问题现在可以关闭了.感谢大家的帮助.