如何在系统启动时使用 C# 服务执行进程
how to execute a process while system starting using c# service
我有一个 c# 服务,我需要在设备启动时执行特定进程。我如何使用 c# 执行此操作。我不知道如何检测 windows 正在启动。
System.Diagnostics.Process proc = new Process();
proc.StartInfo.FileName = fileName;
proc.StartInfo.Arguments = details["arguments"];
proc.StartInfo.Verb = "runas";
proc.Start();
proc.WaitForExit();
检测windows 启动(或刚刚启动)的一种方法是使用System.Envinroment.TickCount,其中returns 自系统启动以来的毫秒数。
你需要设置一个变量来表明你已经阅读并对此采取了行动,因为大约一个月后它再次滚动到零,因为它用完 space 来存储这么大的数字。 (编辑 - 正如所指出的,它已签名并变为负数)
int result = Environment.TickCount
如果结果小于 300,000,则 windows 在过去 5 分钟内重新启动。显然,您需要计划并非所有计算机都会快速重启。
编辑
现在我们知道问题是 onStart 没有被调用......基于上面的评论......
1) OP,你确定设备确实正在关闭,而不仅仅是 sleeping/hibernating
2) 您是否检查过 windows 事件日志以证明服务确实停止和启动了?
您可以在“服务”window 中将服务设置为“自动”,然后在开始时执行您的代码或启动计时器以在不久后启动。
我有一个 c# 服务,我需要在设备启动时执行特定进程。我如何使用 c# 执行此操作。我不知道如何检测 windows 正在启动。
System.Diagnostics.Process proc = new Process();
proc.StartInfo.FileName = fileName;
proc.StartInfo.Arguments = details["arguments"];
proc.StartInfo.Verb = "runas";
proc.Start();
proc.WaitForExit();
检测windows 启动(或刚刚启动)的一种方法是使用System.Envinroment.TickCount,其中returns 自系统启动以来的毫秒数。 你需要设置一个变量来表明你已经阅读并对此采取了行动,因为大约一个月后它再次滚动到零,因为它用完 space 来存储这么大的数字。 (编辑 - 正如所指出的,它已签名并变为负数)
int result = Environment.TickCount
如果结果小于 300,000,则 windows 在过去 5 分钟内重新启动。显然,您需要计划并非所有计算机都会快速重启。
编辑 现在我们知道问题是 onStart 没有被调用......基于上面的评论...... 1) OP,你确定设备确实正在关闭,而不仅仅是 sleeping/hibernating 2) 您是否检查过 windows 事件日志以证明服务确实停止和启动了?
您可以在“服务”window 中将服务设置为“自动”,然后在开始时执行您的代码或启动计时器以在不久后启动。