c# - 保持应用程序始终运行

标签 c# .net windows

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

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

最佳答案

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

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

关于c# - 保持应用程序始终运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12984044/

相关文章:

c - 在c中逐字读取缓冲区

c++ - 打开文件时基于 Qt 的应用程序 'Qt platform plugin windows not found' 问题

windows - 从 Windows 10 PgAdmin 连接安装在 Hyper-V Ubuntu 中的 docker 中的 PostgreSQL

c# - 从用户处获取输入以填充 C# 中的列表

c# - ASHX 处理程序中的异步发布

c# - 如何使用传递给 EntityFramework Core CLI 的环境参数

.net - WinForms 应用程序在 16 位显示屏上使用低质量标题栏图标

c# - 如何创建具有初始大小的 Span<T>?

c# - 在 C# 中是否有一个函数关联 IEnumerable 上的顺序值

c# - WCF 和 NetNamedPipeBinding - AVG 防病毒软件