【问题标题】:Keep application running all the time让应用程序始终运行
【发布时间】:2012-10-20 08:28:43
【问题描述】:

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

  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. 总体思路可以吗?

【问题讨论】:

  • 为什么不只拥有 myservice.exe?
  • 这只是对用户的敌意。毫无意义,她当然会扼杀你的服务。编写真正有用的代码,用户回报并保持运行。
  • @HansPassant 这只是我老板给我的要求。这个应用程序应该监控工人的效率,所以我必须让他们很难关闭它或忘记启动它。 :)
  • 如果他们杀死程序,那么他们的生产力为零。在编程中没有真正的马意识替代品,当用户发现他们被监控时,你会看到很多。
  • @HansPassant 如果他们手动终止程序,我对此无能为力,但他们的经理绝对可以:)

标签: c# .net windows


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    大体思路可以吗?

    正如 Hans 在 cmets 中指出的那样,这对用户是不利的,幸运的是在 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 返回后完成工作,则需要从 OnStart 返回,创建一个 Thread 来完成这项工作。

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 2019-12-22
      • 2016-04-07
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多