我正在尝试以编程方式从用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();
答案 0 :(得分:3)
服务没有与之关联的桌面,因此当您启动GUI应用程序时,它不会显示给用户。
您需要将服务配置为与桌面进行交互,然后才能运行。您可以在服务安装程序类
中以图解方式执行此操作或者在登录标签下的服务属性窗口中手动操作。
答案 1 :(得分:3)
您不应该从服务与用户交互,包括启动流程。这实际上是在Vista和including services marked as 'interactive'中主动禁止的,原因主要是安全性:
重要服务不能直接 从Windows开始与用户交互 Vista中。
如果您想与用户会话进行交互,那么您必须在用户会话中拥有一个进程(例如托盘图标应用程序),该进程通过IPC协议(网络管道,共享内存,消息等)与服务交互。
创建一个单独的UI应用程序,该应用程序在会话启动时运行,并且当服务提出要求时,该应用程序可以启动“sd.exe”。