从C#Windows服务生成进程

从C#Windows服务生成进程,c#,windows,service,C#,Windows,Service,嗯,我试图从Windows服务生成的线程中生成一个进程。目标是读取输出并打印到焦点窗口——光标所在的位置。也许是个坏主意,我不知道我不是c#程序员 当我调用函数本身时,生成该进程的任何人都可以工作,但在运行的服务中调用该函数时则不行。是否可以在服务内部启动流程 Process proc = new Process(); proc.StartInfo.FileName = @"C:\file.bat"; proc.StartInfo.

嗯,我试图从Windows服务生成的线程中生成一个进程。目标是读取输出并打印到焦点窗口——光标所在的位置。也许是个坏主意,我不知道我不是c#程序员

当我调用函数本身时,生成该进程的任何人都可以工作,但在运行的服务中调用该函数时则不行。是否可以在服务内部启动流程

Process proc = new Process();
                proc.StartInfo.FileName = @"C:\file.bat";
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.UseShellExecute = false;

                proc.Start();

                String outputMessage = proc.StandardOutput.ReadToEnd();
                proc.WaitForExit();

从服务启动流程当然是可能的。但是,服务在会话0内运行,没有桌面。交互式用户在不同的会话中运行其桌面。因此,当从服务启动时,在交互式会话中启动并运行进程是非常具有挑战性的

有关所涉及问题的说明,以及正确操作的难度,请阅读以下内容:


最简单的方法是将您的服务分成两个不同的部分。一部分作为服务运行,另一部分作为交互式会话中的无窗口进程运行。这两个进程可以通过您喜欢的任何IPC机制进行通信。当服务想要启动一个进程时,它只需在交互会话中向它的另一半发送一条消息,请求启动新进程。

如果需要在GUI之间进行交互并向用户显示某种反馈,为什么不通过命名管道实现WCF接口呢。在您的服务中托管它,并提供“状态”API,甚至在需要时提供函数。这样,您可以向系统上的任何用户提供gui,并且服务保持干净


但正如@David Heffernan所提到的,实际上并不建议从windows服务创建gui,从Vista开始,他们在会话0上下文中创建gui。

这可能与服务运行时的用户权限有关。这段代码在服务中运行时会发生什么情况?您是否收到任何类型的错误?没有错误,它启动良好。什么也没发生。在服务中运行进程后,outputMessage变量中有什么。@stefan,该设置在Windows Vista及更高版本中不再存在。服务现在在他们自己的桌面上运行,而这个桌面没有访问用户桌面的权限。是的,我现在看到了。这一切都将进入XP!!很酷,我看到了“允许服务与桌面交互”框。检查过了,我现在可以看到事情正在发生。亲爱的,你一定在XP上。这种设置对Vista和更高版本没有帮助。