目前有个需求,需要在一个Windows服务中启动一个WindowsApplication。但是从服务中启动的WindowsApplication好像不能正常执行,调用一些System.Windows.Forms中的组件功能都失效。  怎么办才好?是否有什么参数可以配置。是否无法实现,因为svchost是在windows登录前开始运行的,具体什么原因?请那位讲解下,谢谢!

解决方案 »

  1.   

    serive 不能和应用程序交互  你的服务属性 有个选项"是否与桌面交互" 你把它勾上
      

  2.   

    回一楼:
    可行,谢谢。回三楼:
    MSDN的说明:
    ————————
    Windows 服务应用程序在不同于登录用户的交互区域的窗口区域中运行。窗口区域是包含剪贴板、一组全局原子和一组桌面对象的安全对象。由于 Windows 服务的区域不是交互区域,因此 Windows 服务应用程序中引发的对话框将是不可见的,并且可能导致程序停止响应。同样,错误信息应记录在 Windows 事件日志中,而不是在用户界面中引发。 .NET Framework 支持的 Windows 服务类不支持与交互区域(即登录用户)进行交互。同时,.NET Framework 不包含表示区域和桌面的类。
    ————————
    说简单点就是,在Windows服务中用不了System.Windows.Forms.MessageBox以及Clipborad等等。但是我没想到的是在ServicesBase的子类中,采用Process.Start()的方式启动的另外一个进程(很简单的Hello World进程),都无法呈现界面,甚至于我指定的StartInfo是用户登录的方式,不是使用的服务默认的System用户。