From d378cdad48c00c9d0382dc4287ca71426a7ee014 Mon Sep 17 00:00:00 2001 From: wj32 Date: Thu, 8 Oct 2009 23:35:28 +0000 Subject: [PATCH] fixed -installkph and -uninstallkph command line options git-svn-id: svn://svn.code.sf.net/p/processhacker/code@2103 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- trunk/ProcessHacker/Program/Program.cs | 36 +++++++++++++++++++++----- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/trunk/ProcessHacker/Program/Program.cs b/trunk/ProcessHacker/Program/Program.cs index 19d173bfc..f5d7f0dd9 100644 --- a/trunk/ProcessHacker/Program/Program.cs +++ b/trunk/ProcessHacker/Program/Program.cs @@ -253,8 +253,14 @@ namespace ProcessHacker try { - // Only load KPH if we're on 32-bit and it's enabled. - if (IntPtr.Size == 4 && Properties.Settings.Default.EnableKPH && !NoKph) + if ( + // Only load KPH if we're on 32-bit and it's enabled. + IntPtr.Size == 4 && + Properties.Settings.Default.EnableKPH && + !NoKph && + // Don't load KPH if we're going to install/uninstall it. + !pArgs.ContainsKey("-installkph") && !pArgs.ContainsKey("-uninstallkph") + ) KProcessHacker.Instance = new KProcessHacker("KProcessHacker"); } catch @@ -480,13 +486,20 @@ namespace ProcessHacker { using (var scm = new ServiceManagerHandle(ScManagerAccess.CreateService)) { - scm.CreateService( + using (var shandle = scm.CreateService( "KProcessHacker", "KProcessHacker", ServiceType.KernelDriver, - ServiceStartType.BootStart, - Application.StartupPath + "\\kprocesshacker.sys" - ); + ServiceStartType.SystemStart, + ServiceErrorControl.Ignore, + Application.StartupPath + "\\kprocesshacker.sys", + null, + null, + null + )) + { + shandle.Start(); + } } } catch (WindowsException ex) @@ -494,20 +507,29 @@ namespace ProcessHacker // Need to pass status back. Environment.Exit((int)ex.ErrorCode); } + + return true; } if (pArgs.ContainsKey("-uninstallkph")) { try { - using (var shandle = new ServiceHandle("KProcessHacker", (ServiceAccess)StandardRights.Delete)) + using (var shandle = new ServiceHandle("KProcessHacker", ServiceAccess.Stop | (ServiceAccess)StandardRights.Delete)) + { + try { shandle.Control(ServiceControl.Stop); } + catch { } + shandle.Delete(); + } } catch (WindowsException ex) { // Need to pass status back. Environment.Exit((int)ex.ErrorCode); } + + return true; } if (pArgs.ContainsKey("-ip"))