2012-10-20 141 views
2

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

  1. 创建MyApp.exe将和MyService.exe
  2. MyApp的应该安装的MyService作为服务
  3. 为MyService应该在启动时运行,并定期检查,如果MyApp的运行。如果它不是启动它。

这是我写我的服务的代码:

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. 总体思路是否正确?
+0

为什么不只是有myservice.exe? –

+2

这只是对用户不利。毫无意义的是,她当然会杀了你的服务。编写真正有用的代码,用户返回并保持运行状态。 –

+0

@HansPassant这只是我老板给我的要求。这个应用程序应该监视工作人员的效率,所以我必须让他们很难关闭它或忘记开始它。 :) – gisek

回答

1

的总体思路好吗?

正如汉斯在评论中指出的那样,这对用户是敌意的,幸运的是在Vista或更高版本上无法运行,因为服务运行在他们自己的Windows站点中。将所有需要的逻辑放在服务中运行,并使用IPC机制(如WCF)与(可选)正在运行的UI进行通信。如果用户禁用服务或退出GUI尊重他们的愿望...

如何安装此过程,以便它启动在Windows启动?

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

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

号你需要,如果你需要经过的OnStart回报创建Thread做工作,做的工作,从OnStart返回。

2

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

这种模式将有主应用程序代码运行所有的时间,但GUI仅达当用户登录。

相关问题