保持应用程序始终运行

时间:2012-10-20 00:10:04

标签: c# .net windows

基本上我需要我的应用程序从系统启动运行直到系统关闭。我想出了以下方法:

  1. 创建MyApp.exe和MyService.exe
  2. MyApp应将MyService作为服务安装
  3. MyService应该在启动时运行,并定期检查MyApp是否正在运行。如果它不是启动它。
  4. 这是我为我的服务编写的代码:

    protected override void OnStart(string[] args)
    {
        while(true)
        {
            int processesCount =
                Process.GetProcessesByName(Settings.Default.MyAppName).Count() +
                Process.GetProcessesByName(Settings.Default.MyAppName + ".vshost").Count() +
                Process.GetProcessesByName(Settings.Default.MyAppUpdaterName).Count();
    
            if(processesCount==0)
            {
                //restore
                var p = new Process { StartInfo = { FileName = Settings.Default.MyAppName, Arguments = "" } };
                p.Start();
            }
            else
            {
            }
    
            System.Threading.Thread.Sleep(3000);
        }
    }
    
    1. 如何安装此过程以便在Windows启动时启动?
    2. 我不确定OnStart方法中的这个无限循环是不是一个好主意。是吗?
    3. 一般的想法好吗?

2 个答案:

答案 0 :(得分:2)

我所做的是拥有一个运行逻辑和主应用程序代码的Windows服务。然后,如果您需要GUI,请让Windows服务通过WCF公开Web服务并创建一个调用Web服务的Windows应用程序。在安装时,将Windows应用程序放在Windows启动时。

此模型将始终运行主应用程序代码,但GUI仅在用户登录时启动。

答案 1 :(得分:1)

  

一般的想法好吗?

正如Hans在评论中指出的那样,这对用户来说是敌对的,幸运的是在Vista或更高版本上无法运行,因为服务在他们自己的Windows工作站中运行。放置您在服务中一直运行所需的任何逻辑,并使用IPC机制(如WCF)与(可选)运行的UI进行通信。如果用户禁用该服务或退出GUI尊重他们的意愿......

  

如何安装此流程以便在Windows启动时启动?

添加指向GUI应用程序的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run条目。

  

我不确定OnStart方法中的这个无限循环是不是一个好主意。   是吗?

没有。如果您需要在OnStart返回后创建Thread来完成工作,则需要从OnStart返回。