From 7c82fc4d616fa0bf4470b0f6073c5c28088a09e5 Mon Sep 17 00:00:00 2001 From: Nick Devereaux Date: Mon, 29 Jun 2015 09:47:26 +1000 Subject: [PATCH] Timer to delay relaunch --- README | 6 ++++-- StayUp/Program.cs | 52 +++++++++++++++++++++++++++++++++++++++------- bin/StayUp.exe | Bin 123392 -> 123904 bytes bin/launch.bat | 2 +- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/README b/README index c95fea5..4e368ef 100644 --- a/README +++ b/README @@ -8,8 +8,10 @@ Usage: StayUp [process] -e -i [interval] -t [timeout] in seconds. Default is 3600. -t Time to wait for a process to respond before forcing it to restart, in seconds. Default is 5. + -d Time to wait between launches in seconds + Default is 0. -Example: StayUp MyApp.exe -e -i 3600 -t 5 +Example: StayUp MyApp.exe -e -i 3600 -t 5 -d 10 When event log is enabled, information and errors are recorded logged and viewable in Windows' Event Viewer. Open the Event Viewer and go to @@ -17,7 +19,7 @@ viewable in Windows' Event Viewer. Open the Event Viewer and go to ----------------------------------------- -Version 1.1.0.5 +Version 1.1.0.7 ----------------------------------------- diff --git a/StayUp/Program.cs b/StayUp/Program.cs index 11e6b33..3b71588 100644 --- a/StayUp/Program.cs +++ b/StayUp/Program.cs @@ -63,7 +63,7 @@ class Program /// /// Version number /// - const string kVersion = "1.1.0.6"; + const string kVersion = "1.1.0.7"; #endregion #region Static members @@ -137,7 +137,17 @@ class Program /// Flags whether help message has been displayed /// private static bool sWroteHelpMessage = false; - + + + /// + /// Delay for relaunch + /// + private static Timer sRelaunchDelayTimer; + + /// + /// Time between launches + /// + private static int sRelaunchDelay; #endregion #region External @@ -316,7 +326,14 @@ public static void Main( string[] args ) } else { WriteHelp(); } - + } else if ( args[ i ] == "-d" ) { + ++i; + double timeout = 0.0; + if ( i < args.Length && double.TryParse( args[ i ], out timeout ) ) { + sRelaunchDelay = (int) (timeout * 1000.0); + } else { + WriteHelp(); + } } else { WriteHelp(); } @@ -331,8 +348,8 @@ public static void Main( string[] args ) Environment.Exit( 1 ); return; } - Console.ReadLine(); - + while (Console.ReadKey(true).Key != ConsoleKey.Escape) {} + } /// @@ -367,8 +384,10 @@ static void WriteHelp() Console.WriteLine( " in seconds. Default is 3600." ); Console.WriteLine( " -t Time to wait for a process to respond before forcing it" ); Console.WriteLine( " to restart, in seconds. Default is 5." ); + Console.WriteLine( " -d Time to wait between launches in seconds"); + Console.WriteLine( " Default is 0."); Console.WriteLine( "" ); - Console.WriteLine( "Example: StayUp MyApp.exe -e -i 3600 -t 5" ); + Console.WriteLine( "Example: StayUp MyApp.exe -e -i 3600 -t 5 -d 5" ); } } @@ -408,7 +427,17 @@ private static void ExitHandler( object sender, EventArgs e ) ">> Exit time: " + DateTime.Now.ToString() + "\n" + GetInfoString(), EventLogEntryType.Error ); } - Launch(); + + if (sRelaunchDelay > 0) + { + Log("Waiting " + sRelaunchDelay/1000 + "s until relaunch.\nPress ESC to quit"); + TimeSpan delay = TimeSpan.FromMilliseconds((double) sRelaunchDelay); + sRelaunchDelayTimer = new Timer(new TimerCallback(RelaunchTimerHandler), null, delay, TimeSpan.FromMilliseconds(-1)); + } + else + { + Launch(); + } } /// @@ -423,6 +452,15 @@ private static void InfoTimerHandler( object sender ) Log( "Process information:\n" + GetInfoString() ); } + /// + /// Timer called after relaunch delay has elapsed + /// + /// + private static void RelaunchTimerHandler(object sender) + { + sRelaunchDelayTimer.Dispose(); + Launch(); + } /// /// Main application callback /// diff --git a/bin/StayUp.exe b/bin/StayUp.exe index 9fe38c29f7e1eb44e34fa6cfbb5964d861f6658e..a241d7c733aac916847b36bbae9cf4e359538426 100644 GIT binary patch delta 2968 zcmZuz4RBP|6+Y+f``O)Ole|sL54*wLBqT3O68W<%1SCIbpusjI2DD%)CL2f_6S4_5 zjGgQ{*eakc@j1aNPBDWOn8*yXf}}r@I4SruZFMSB89EfK%uuFfM6}~L3jOZgO~6iH z^1ge{cg{WM+jb)FPX<20fY5aTS_@w%ZyYbv+Y5j6_^ z2SoATBrVcB1p$T9A%|;;{Ps{wh5Z1RxhIQ21#p+xJ9##j+Q+zzKeEqpQD7eeifaXK zg)|zlh)(1aIiMRvI%3R8G$~DrLW(`2PP)8EnwK6{*zVEt@BLUzb3PyaGt(C9TSV@P z#m>C@(~Cjls;cogm7jOs;fIUYVJ#H)ESD9=7)Nk5{4$&@H`0V(fMowkt8Z8<_1R4# z>e=b2OKyoulI0TEV9hRrdxWYU^n)O@cqo^5;d8L`i=-?$OIAcEY1l$MG_l}4Vm z2udi=T8trE_v%(Pgxh`d{~cn#sM;cP5#?79$?a`vNy^!CRBD1%BQgh3vf5=W!8~`) zb=`xweM_O_q}Kh(GP%aspjc$zU9iNRkl>m*?W*fZLlz97HG{(5vkabtf{;=Or!a>p zDr&+tXu?qW!@Rf{qpeD6Rnb38OLsb^xPwxPAzajD1IVMGsGL zq3=i2b=u;Zh|^~&$TH%zZUb%M z5cJvY$=KPdsivZv>Nmn;{XAl-sRX8)%#f{lwOdn|YAT1RrjnSd%#vK}AnH(a=dO)D zk1C}SxP*seovc1O3eu{dDoL7?eUXO4F3CWd$;L3II^zx5HOZs*B67&CaTb<-Cc=mX z%3YSr3*9p)?6MPN=az=-sME??j%0DX8r0-Q-fbUp7S0G5s14cFoAZx_qgC%TWA!!j=rSg zhSrrRfPM#Eb=aS}N^iqi;l+WDz>Ur%6ip3wrF&)UAn#;1{fj%uO(jYPdZj_B1iq{6 zWSu;YYl==`N2x=n?@H{FxJ%-GiNBZlp~Pzv(^WAyAhAjna~mYKs~yxv1L6s%SJWp| zoleE%a8bHCG?CaVu}b0si4lo0O$2&PJEXbk9Zi&*p^I{t>SES9iNBVZW(cN2V!gx; zV~wHH4&ycON5P0ozBkC;oHh_MX%p|jzC6lLOH-VN0twy&m!^OqhUg^kCntT7(mvn= z&=v%fwhL10DiYc-UE)#LwoYqD$VGco+I2ooX*5}qoaa!+@f8TnB0K>|ktx;itfX;< z)Q+XJ#mbv-eJ`c0R^Fxznpu|gd{B80r@kVkbwe|0eM;L7&5NcLoYsM07}Fnt;so;WR3AUdk6GUIr?3_5aFD!YXhz zi4qZNS_Yf^q~-&@h-n2prUh9{E9D@I zpg}&Xoxx-wm(wM!lFR8o+BqtRRfAlnFW|W;`P+Imm{$F3TEr3k3b0qN1M|4P0=Nr| zh`fqTdO_d7wJ|=dkK)vh>m8up(1qc<0pc1bJBLMJb-+;U5qVfgha5KNiWBe|E%wMQFJ1CJ@mO08rea(@sja$3hHZRAx?Y_>3BT@P$ zXJ5{`=$!IOylEa&%j1?bC_A2efQ#+k!s5ie zdB<4A3#HxWf}paH?1{qW#3KcxN^Wm}{`XI~E%D6?KSUAgrym0&)D5pLwC`3(ZL}Fo zADB+b_d#o;9?0!rx!Rua<=W?GxNX&!tIr|4g&(ww{moi{MC2|0XYV)HB2*`WivXJt zh#EvV5nOOxkfR8CYr-nL`kEx$CsW@|EmRM`ek2ayQQ9iv*-GIvS;re``0aI{tQx6U zYA>2dud??S{)87Mf-|$ZQ71Oz2NjfJ#$U}e3~&4h{+%9=2XtCMWpDhb-}IOs)nL{BDYs^cE!;J1@QU@T#%K zCq942|H@bMeE0%T`{MN*+Ird}wi=wY_qBw*&((oVU5AAn7z*Yp`|1*32K#w?M#<|L UCH&=Yl@s$`f4`2;GUoXH3uIg@UjP6A delta 2405 zcmZvee{2)y8ONXJeD|Kui34_i*a;yxKbl+;oP?3F0vm*%2`XB$Sfpc%(x$+@c4=LjHpR}Ae$kqj{`~uA$cY)jc1Lz|pNRjCY1CdvBZbQj0_&JM*F>y%ABKqA!FOi4tFhQj{xxXR|7ll7$jq zlO^4d5LvJkDMZ$>9FB&bl=R22aGsPjC<*mkElho~Ca#nZj&M&PBineVMx$xF86D!k zhM1L_U5nDmCF$;x^o+jfeMhdC>ihYkt)Vaeb%RD-F>JEO4g&#OV6YfOVT+4yU;t2k zwuLr@UDm_gkXAyh4Z$7}Sle6vBdibSnI-WgQcanG|N5U^3D1-njGt4UQhN(J<@>cS zN>;-WD}**>mc>gkuqktet)a@4X&1w68;~1wxxH2{ww7Z5&h)-jTwZ z=;7^wjBMj>99t_Owj=0fg>zdEIDfVd7s->N`jn{cYpBrd9Zu3?Z#stQRi}tPMSBXz zr8<&~4~^_kV7=+5I9J11_3Awl93CQ^461J5vkSSY2>M5wbKO&0j1|P=gU!J$Lu9+d zDbCxKKFa&qL+|k*d5E<^>|l)+1|4lb3%aUZ(2(7=00tCW6(fqniboVD6)z}Waml`a zRs2j@mgzFXYJHFfs7=R`P)zUC1wA{cnzOp>a7mYiuPc70_;1CqA?@vkO!2r8H$3!X zLk{;3pddp?Z?)ox;_nr`=3ODE#ry@ly-sKTku>H^8JY-<^YeI0yFyZ*pp$%x+;kFcjee6~;r#%48N5|@DejFM**Uss$5Kcvgx-{=~6m2NA$MVIvj`h@m85Rm+u}mPsr5q;U{ zZ{hEWX>3qN48roHkoKP|`DO84$bEy_qZrE@=*;|%_&)FA>mtRa^r1MypU}tRI8uBn zPEjeXGLP_HHHboLx+sjI$ z?{gEapmkakRnu0mQE@GGK;EeA+o%`v1Iqqw#R2*OED4$h4`chA=m~lYJWiLie^L>5 z^EjX8S^h1*sS9?|`0PW=r`c)p|7o_a@Qm*6j`r`{Jv0(^{uMYqI~lye&RE$hUN`$< z**%RTPG?28^Ge0DPNdZ5ytFF4{L+^Bi&vgL(?01x*K=a;(K4qs^f;ntLWR60&oum* zGx)i^-n@{`{><5OpV#NrP4;>57W8Fiyr$t^Sq?#Ac3D-JaljY#e7JXe zY~awr=twfr+cT6n)IS`GBoFNyiiN(^vSw{>S3LHe=m30?WdCD(Mzf7GR(-zU4nB^H qS3#STswtZY_-ChThS_