在Windows服务的C#中以编程方式启动进程,UI未显示我在任务管理器中看到该进程

时间:2010-01-28 03:54:14

标签: c# windows

我正在尝试以编程方式从用C#编写的Windows服务启动一个进程。我看到我的进程已经在任务管理器中启动但我没有看到它的UI。

有什么想法吗?我在windows xp上运行它

clientProcess = new System.Diagnostics.Process();
clientProcess.StartInfo.FileName = system_drive_path + @"\sd\ud\ud.exe";
clientProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
clientProcess.Start();

2 个答案:

答案 0 :(得分:3)

服务没有与之关联的桌面,因此当您启动GUI应用程序时,它不会显示给用户。

您需要将服务配置为与桌面进行交互,然后才能运行。您可以在服务安装程序类

中以图解方式执行此操作

或者在登录标签下的服务属性窗口中手动操作。

答案 1 :(得分:3)

您不应该从服务与用户交互,包括启动流程。这实际上是在Vista和including services marked as 'interactive'中主动禁止的,原因主要是安全性:

  

重要服务不能直接   从Windows开始与用户交互   Vista中。

如果您想与用户会话进行交互,那么您必须在用户会话中拥有一个进程(例如托盘图标应用程序),该进程通过IPC协议(网络管道,共享内存,消息等)与服务交互。

创建一个单独的UI应用程序,该应用程序在会话启动时运行,并且当服务提出要求时,该应用程序可以启动“sd.exe”。