mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
System Startup charge limiter
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
using GHelper.Helpers;
|
||||
using Microsoft.Win32.TaskScheduler;
|
||||
using System.Diagnostics;
|
||||
using System.Security.Principal;
|
||||
|
||||
public class Startup
|
||||
{
|
||||
|
||||
static string taskName = "GHelper";
|
||||
static string chargeTaskName = taskName + "Charge";
|
||||
static string strExeFilePath = Application.ExecutablePath.Trim();
|
||||
|
||||
public static bool IsScheduled()
|
||||
{
|
||||
@@ -32,7 +33,6 @@ public class Startup
|
||||
{
|
||||
try
|
||||
{
|
||||
string strExeFilePath = Application.ExecutablePath.Trim();
|
||||
string action = task.Definition.Actions.FirstOrDefault()!.ToString().Trim();
|
||||
if (!strExeFilePath.Equals(action, StringComparison.OrdinalIgnoreCase) && !File.Exists(action))
|
||||
{
|
||||
@@ -41,11 +41,60 @@ public class Startup
|
||||
UnSchedule();
|
||||
Schedule();
|
||||
}
|
||||
} catch (Exception ex)
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine($"Can't check startup task: {ex.Message}");
|
||||
}
|
||||
|
||||
if (taskService.RootFolder.AllTasks.FirstOrDefault(t => t.Name == chargeTaskName) == null) ScheduleCharge();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void UnscheduleCharge()
|
||||
{
|
||||
using (TaskService taskService = new TaskService())
|
||||
{
|
||||
try
|
||||
{
|
||||
taskService.RootFolder.DeleteTask(chargeTaskName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.WriteLine("Can't remove charge limit task: " + e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ScheduleCharge()
|
||||
{
|
||||
|
||||
if (strExeFilePath is null) return;
|
||||
|
||||
using (TaskDefinition td = TaskService.Instance.NewTask())
|
||||
{
|
||||
td.RegistrationInfo.Description = "G-Helper Charge Limit";
|
||||
td.Triggers.Add(new BootTrigger());
|
||||
td.Actions.Add(strExeFilePath, "charge");
|
||||
|
||||
td.Principal.RunLevel = TaskRunLevel.LUA;
|
||||
td.Principal.LogonType = TaskLogonType.S4U;
|
||||
td.Principal.UserId = WindowsIdentity.GetCurrent().Name;
|
||||
|
||||
td.Settings.StopIfGoingOnBatteries = false;
|
||||
td.Settings.DisallowStartIfOnBatteries = false;
|
||||
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
|
||||
|
||||
try
|
||||
{
|
||||
TaskService.Instance.RootFolder.RegisterTaskDefinition(chargeTaskName, td);
|
||||
Logger.WriteLine("Charge limit task scheduled: " + strExeFilePath);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.WriteLine("Can't create a charge limit task: " + e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,29 +102,20 @@ public class Startup
|
||||
public static void Schedule()
|
||||
{
|
||||
|
||||
string strExeFilePath = Application.ExecutablePath;
|
||||
|
||||
if (strExeFilePath is null) return;
|
||||
|
||||
var userId = WindowsIdentity.GetCurrent().Name;
|
||||
|
||||
using (TaskDefinition td = TaskService.Instance.NewTask())
|
||||
{
|
||||
|
||||
td.RegistrationInfo.Description = "G-Helper Auto Start";
|
||||
td.Triggers.Add(new LogonTrigger { UserId = userId, Delay = TimeSpan.FromSeconds(1) });
|
||||
td.Triggers.Add(new LogonTrigger { UserId = WindowsIdentity.GetCurrent().Name, Delay = TimeSpan.FromSeconds(1) });
|
||||
td.Actions.Add(strExeFilePath);
|
||||
|
||||
if (ProcessHelper.IsUserAdministrator())
|
||||
if (ProcessHelper.IsUserAdministrator())
|
||||
td.Principal.RunLevel = TaskRunLevel.Highest;
|
||||
|
||||
td.Settings.StopIfGoingOnBatteries = false;
|
||||
td.Settings.DisallowStartIfOnBatteries = false;
|
||||
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
|
||||
|
||||
Debug.WriteLine(strExeFilePath);
|
||||
Debug.WriteLine(userId);
|
||||
|
||||
try
|
||||
{
|
||||
TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td);
|
||||
@@ -89,6 +129,8 @@ public class Startup
|
||||
}
|
||||
}
|
||||
|
||||
ScheduleCharge();
|
||||
|
||||
}
|
||||
|
||||
public static void UnSchedule()
|
||||
@@ -107,5 +149,7 @@ public class Startup
|
||||
ProcessHelper.RunAsAdmin();
|
||||
}
|
||||
}
|
||||
|
||||
UnscheduleCharge();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user