Skip to content

Commit

Permalink
v1.6.1
Browse files Browse the repository at this point in the history
  • Loading branch information
lich426 committed Apr 5, 2023
1 parent a7d9cb6 commit 8dd205f
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 55 deletions.
7 changes: 4 additions & 3 deletions FanCtrl.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<SupportUrl>https://github.com/lich426/FanCtrl</SupportUrl>
<ErrorReportUrl>https://github.com/lich426/FanCtrl</ErrorReportUrl>
<ProductName>FanCtrl</ProductName>
<PublisherName>Lich</PublisherName>
<SuiteName>FanCtrl</SuiteName>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.6.0.0</ApplicationVersion>
<ApplicationVersion>1.6.1.0</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
Expand Down Expand Up @@ -102,8 +104,7 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>dll\LibreHardwareMonitorLib.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Win32.TaskScheduler, Version=2.8.15.0, Culture=neutral, PublicKeyToken=c416bc1b32d97233, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Reference Include="Microsoft.Win32.TaskScheduler">
<HintPath>dll\Microsoft.Win32.TaskScheduler.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
Expand Down
8 changes: 4 additions & 4 deletions Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
[assembly: AssemblyTitle("FanCtrl")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyCompany("Lich")]
[assembly: AssemblyProduct("FanCtrl")]
[assembly: AssemblyCopyright("Made by Lich (lich426@gmail.com)")]
[assembly: AssemblyTrademark("")]
Expand All @@ -31,6 +31,6 @@
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
[assembly: AssemblyVersion("1.6.0")]
[assembly: AssemblyFileVersion("1.6.0")]
[assembly: AssemblyInformationalVersion("1.6.0")]
[assembly: AssemblyVersion("1.6.1")]
[assembly: AssemblyFileVersion("1.6.1")]
[assembly: AssemblyInformationalVersion("1.6.1")]
Binary file modified dll/LibreHardwareMonitorLib.dll
Binary file not shown.
143 changes: 95 additions & 48 deletions src/libs/Data/Option/StartupControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,31 @@ public StartupControl()
return;
}

if (IsAdministrator() && TaskService.Instance.Connected)
bool isTaskConnected = false;
try
{
isTaskConnected = TaskService.Instance.Connected;
}
catch(Exception e)
{
Console.WriteLine("StartupControl.StartupControl() : {0}", e.Message);
}

if (IsAdministrator() && isTaskConnected)
{
IsAvailable = true;

Task task = GetTask();
var task = GetTask();
if (task != null)
{
foreach (Action action in task.Definition.Actions)
foreach (var action in task.Definition.Actions)
{
if (action.ActionType == TaskActionType.Execute && action is ExecAction execAction)
{
if (execAction.Path.Equals(Application.ExecutablePath, StringComparison.OrdinalIgnoreCase))
{
_startup = true;
}
}
}
}
Expand All @@ -53,18 +65,21 @@ public StartupControl()
{
try
{
using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(RegistryPath))
using (var registryKey = Registry.CurrentUser.OpenSubKey(RegistryPath))
{
string value = (string)registryKey?.GetValue(RegistryName);

if (value != null)
_startup = value == Application.ExecutablePath;
{
_startup = (value == Application.ExecutablePath);
}
}

IsAvailable = true;
}
catch (SecurityException)
catch (Exception e)
{
Console.WriteLine("StartupControl.Startup() : {0}", e.Message);
IsAvailable = false;
}
}
Expand All @@ -81,104 +96,136 @@ public bool Startup
{
if (IsAvailable)
{
if (TaskService.Instance.Connected)
bool isTaskConnected = false;
try
{
isTaskConnected = TaskService.Instance.Connected;
}
catch (Exception e)
{
Console.WriteLine("StartupControl.Startup() : {0}", e.Message);
}

if (isTaskConnected)
{
if (value)
CreateTask();
{
if (CreateTask() == false)
{
_startup = false;
return;
}
}
else
{
DeleteTask();

_startup = value;
}
}
else
{
try
if (value)
{
if (value)
CreateRegistryKey();
else
DeleteRegistryKey();

_startup = value;
if (CreateRegistryKey() == false)
{
_startup = false;
return;
}
}
catch (UnauthorizedAccessException)
else
{
throw new InvalidOperationException();
DeleteRegistryKey();
}
}
_startup = value;
}
else
{
throw new InvalidOperationException();
_startup = false;
}
}
}
}

private static bool IsAdministrator()
private bool IsAdministrator()
{
try
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
var identity = WindowsIdentity.GetCurrent();
var principal = new WindowsPrincipal(identity);

return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch
catch (Exception e)
{
return false;
Console.WriteLine("StartupControl.IsAdministrator() : {0}", e.Message);
}
return false;
}

private static Task GetTask()
private Task GetTask()
{
try
{
return TaskService.Instance.AllTasks.FirstOrDefault(x => x.Name.Equals(RegistryName, StringComparison.OrdinalIgnoreCase));
}
catch
catch (Exception e)
{
return null;
Console.WriteLine("StartupControl.GetTask() : {0}", e.Message);
}
return null;
}

private void CreateTask()
private bool CreateTask()
{
TaskDefinition taskDefinition = TaskService.Instance.NewTask();
taskDefinition.RegistrationInfo.Description = "Starts FanCtrl on Windows startup.";
try
{
var taskDefinition = TaskService.Instance.NewTask();
taskDefinition.RegistrationInfo.Description = "Starts FanCtrl on Windows startup.";

var trigger = new LogonTrigger();
trigger.Delay = new TimeSpan(0, 0, DelayTime);
taskDefinition.Triggers.Add(trigger);
var trigger = new LogonTrigger();
trigger.Delay = new TimeSpan(0, 0, DelayTime);
taskDefinition.Triggers.Add(trigger);

taskDefinition.Settings.StartWhenAvailable = true;
taskDefinition.Settings.DisallowStartIfOnBatteries = false;
taskDefinition.Settings.StopIfGoingOnBatteries = false;
taskDefinition.Settings.ExecutionTimeLimit = TimeSpan.Zero;
taskDefinition.Settings.StartWhenAvailable = true;
taskDefinition.Settings.DisallowStartIfOnBatteries = false;
taskDefinition.Settings.StopIfGoingOnBatteries = false;
taskDefinition.Settings.ExecutionTimeLimit = TimeSpan.Zero;

taskDefinition.Principal.RunLevel = TaskRunLevel.Highest;
taskDefinition.Principal.LogonType = TaskLogonType.InteractiveToken;
taskDefinition.Principal.RunLevel = TaskRunLevel.Highest;
taskDefinition.Principal.LogonType = TaskLogonType.InteractiveToken;

taskDefinition.Actions.Add(new ExecAction(Application.ExecutablePath, "", Path.GetDirectoryName(Application.ExecutablePath)));
taskDefinition.Actions.Add(new ExecAction(Application.ExecutablePath, "", Path.GetDirectoryName(Application.ExecutablePath)));

TaskService.Instance.RootFolder.RegisterTaskDefinition(RegistryName, taskDefinition);
TaskService.Instance.RootFolder.RegisterTaskDefinition(RegistryName, taskDefinition);
return true;
}
catch (Exception e)
{
Console.WriteLine("StartupControl.CreateTask() : {0}", e.Message);
}
return false;
}

private static void DeleteTask()
private void DeleteTask()
{
Task task = GetTask();
var task = GetTask();
task?.Folder.DeleteTask(task.Name, false);
}

private static void CreateRegistryKey()
private bool CreateRegistryKey()
{
RegistryKey registryKey = Registry.CurrentUser.CreateSubKey(RegistryPath);
var registryKey = Registry.CurrentUser.CreateSubKey(RegistryPath);
if (registryKey == null)
{
return false;
}
registryKey?.SetValue(RegistryName, Application.ExecutablePath);
return true;
}

private static void DeleteRegistryKey()
private void DeleteRegistryKey()
{
RegistryKey registryKey = Registry.CurrentUser.CreateSubKey(RegistryPath);
var registryKey = Registry.CurrentUser.CreateSubKey(RegistryPath);
registryKey?.DeleteValue(RegistryName);
}
}
Expand Down

0 comments on commit 8dd205f

Please sign in to comment.