基本上我需要我的应用程序从系统启动到系统关闭运行。我想出了以下方法:
- 创建 MyApp.exe 和 MyService.exe
- MyApp 应将 MyService 安装为服务
- 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);
}
}
- 如何安装此过程,使其在 Windows 启动时启动?
- 我不确定 OnStart 方法中的这个无限循环是否是一个好主意。是吗?
- 总体思路可以吗?
我所做的是拥有一个运行逻辑和主应用程序代码的 Windows 服务。 然后,如果需要 GUI,请让 Windows 服务通过 WCF 公开 Web 服务,并创建一个调用 Web 服务的 Windows 应用。 在安装时,将Windows应用程序放在Windows启动中。
此模型将始终运行主应用程序代码,但 GUI 仅在用户登录时启动。
总体思路可以吗?
正如Hans在评论中指出的那样,这对用户来说是敌对的,幸运的是,由于服务在自己的Windows工作站中运行,因此无法在Vista或更高版本上运行。 将始终运行所需的任何逻辑放在服务中,并使用 IPC 机制(如 WCF)与(可选)正在运行的 UI 进行通信。 如果用户禁用服务或退出 GUI,请尊重他们的意愿...
如何安装此过程,使其在 Windows 启动时启动?
向HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
或HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun
添加指向 GUI 应用程序的条目。
我不确定 OnStart 方法中的这个无限循环是否是一个好主意。 是吗?
不。如果需要在 OnStart 返回后执行工作,则需要从OnStart
返回,请创建一个线程来执行该工作。