保持应用程序始终运行



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

  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 仅在用户登录时启动。

总体思路可以吗?

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

如何安装此过程,使其在 Windows 启动时启动?

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunHKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun添加指向 GUI 应用程序的条目。

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

不。如果需要在 OnStart 返回后执行工作,则需要从OnStart返回,请创建一个线程来执行该工作。

相关内容

  • 没有找到相关文章

最新更新