基本上我需要我的应用程序从系统启动运行直到系统关闭。我想出了以下方法:
这是我为我的服务编写的代码:
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);
}
}
答案 0 :(得分:2)
我所做的是拥有一个运行逻辑和主应用程序代码的Windows服务。然后,如果您需要GUI,请让Windows服务通过WCF公开Web服务并创建一个调用Web服务的Windows应用程序。在安装时,将Windows应用程序放在Windows启动时。
此模型将始终运行主应用程序代码,但GUI仅在用户登录时启动。
答案 1 :(得分:1)
一般的想法好吗?
正如Hans在评论中指出的那样,这对用户来说是敌对的,幸运的是在Vista或更高版本上无法运行,因为服务在他们自己的Windows工作站中运行。放置您在服务中一直运行所需的任何逻辑,并使用IPC机制(如WCF)与(可选)运行的UI进行通信。如果用户禁用该服务或退出GUI尊重他们的意愿......
如何安装此流程以便在Windows启动时启动?
添加指向GUI应用程序的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
或HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
条目。
我不确定OnStart方法中的这个无限循环是不是一个好主意。 是吗?
没有。如果您需要在OnStart返回后创建Thread来完成工作,则需要从OnStart
返回。