从windows服务运行外部进程

本文关键字:外部 进程 运行 服务 windows | 更新日期: 2023-09-27 18:00:49

我有一个使用第三方应用程序的windows服务。该应用程序是从一个登录窗口构建的,登录后,该进程在后台运行,不会打扰任何人。

我有代码可以打开这个应用程序(使用Process类(,填充所有必要的字段,然后点击连接按钮。当我从命令行或win表单中使用此代码时,此代码可以完美地工作,但是从windows服务中执行此代码不会产生任何错误,也不会运行任何exe!

我知道这听起来有点奇怪,windows服务在设计上应该是无用户界面的,但在我的服务开始工作之前,我需要先解决这个应用程序的问题,我不想通过两个步骤来完成这个操作——解决外部问题和启动服务。

我试图从服务属性的登录选项卡中检查"允许服务与桌面交互",但没有成功。

任何关于如何使这项工作发挥作用的建议,或者可能是针对这个问题的其他设计,都可以让我一步到位地完成操作。

谢谢。

从windows服务运行外部进程

也许这会对您有所帮助?http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx

请注意,它是针对Windows SDK的,您需要使用PInvoke来执行那里的方法。

另请参阅此相关问题:如何启动从windows服务到当前登录用户的进程';s会话

您需要重新调整您的期望值。系统启动时自动启动您的服务。当用户登录时启动您的应用程序(例如HKLM'Software'Windows'CurrentVersion'Run(。安排服务在应用程序启动之前具有弹性。还要确保服务能够在应用程序停止(例如崩溃(和重新启动后继续运行。

我为什么要这么说?好吧,即使没有交互用户连接,服务也要始终运行。如果是这样的话,那么你就不能指望你的交互式应用程序在服务启动之前运行。

我以前在windows服务中遇到过类似的问题,该服务需要在某些条件下显示表单,但大多数时候只是在后台闲置。

不确定你的要求是什么,但我最终把它写成了一个没有主表单的表单应用程序

再加上程序在启动时启动,效果非常好。

基本上

[STAThread]
    static void Main(string[] args)
    {
        // Launch your stuff in a separate thread like you would in the Service Start method.      
        Application.Run();       
    }

就这样,希望能有所帮助。