Startup using scheduled tasks
This commit is contained in:
@@ -31,6 +31,8 @@ namespace clashN.Mode
|
|||||||
|
|
||||||
public bool allowLANConn { get; set; }
|
public bool allowLANConn { get; set; }
|
||||||
|
|
||||||
|
public bool autoRun { get; set; }
|
||||||
|
|
||||||
public bool enableStatistics { get; set; }
|
public bool enableStatistics { get; set; }
|
||||||
|
|
||||||
public string systemProxyExceptions { get; set; }
|
public string systemProxyExceptions { get; set; }
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using clashN.Base;
|
using clashN.Base;
|
||||||
using clashN.Mode;
|
using clashN.Mode;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
using Microsoft.Win32.TaskScheduler;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using NLog;
|
using NLog;
|
||||||
@@ -534,8 +535,25 @@ namespace clashN
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string exePath = GetExePath();
|
//delete first
|
||||||
RegWriteValue(autoRunRegPath, autoRunName, run ? $"\"{exePath}\"" : null);
|
RegWriteValue(autoRunRegPath, autoRunName, null);
|
||||||
|
if (IsAdministrator())
|
||||||
|
{
|
||||||
|
AutoStart(autoRunName, "", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (run)
|
||||||
|
{
|
||||||
|
string exePath = $"\"{GetExePath()}\"";
|
||||||
|
if (IsAdministrator())
|
||||||
|
{
|
||||||
|
AutoStart(autoRunName, exePath, "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RegWriteValue(autoRunRegPath, autoRunName, exePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -664,6 +682,47 @@ namespace clashN
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Auto Start via TaskService
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="taskName"></param>
|
||||||
|
/// <param name="fileName"></param>
|
||||||
|
/// <param name="description"></param>
|
||||||
|
/// <exception cref="ArgumentNullException"></exception>
|
||||||
|
public static void AutoStart(string taskName, string fileName, string description)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(taskName))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
string TaskName = taskName;
|
||||||
|
var logonUser = WindowsIdentity.GetCurrent().Name;
|
||||||
|
string taskDescription = description;
|
||||||
|
string deamonFileName = fileName;
|
||||||
|
|
||||||
|
using (var taskService = new TaskService())
|
||||||
|
{
|
||||||
|
var tasks = taskService.RootFolder.GetTasks(new Regex(TaskName));
|
||||||
|
foreach (var t in tasks)
|
||||||
|
{
|
||||||
|
taskService.RootFolder.DeleteTask(t.Name);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(fileName))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var task = taskService.NewTask();
|
||||||
|
task.RegistrationInfo.Description = taskDescription;
|
||||||
|
task.Settings.DisallowStartIfOnBatteries = false;
|
||||||
|
task.Triggers.Add(new LogonTrigger { UserId = logonUser });
|
||||||
|
task.Principal.RunLevel = TaskRunLevel.Highest;
|
||||||
|
task.Actions.Add(new ExecAction(deamonFileName));
|
||||||
|
|
||||||
|
taskService.RootFolder.RegisterTaskDefinition(TaskName, task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 测速
|
#region 测速
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ namespace clashN.ViewModels
|
|||||||
}, this.IsValid());
|
}, this.IsValid());
|
||||||
|
|
||||||
//clashN
|
//clashN
|
||||||
AutoRun = Utils.IsAutoRun();
|
AutoRun = _config.autoRun;
|
||||||
EnableStatistics = _config.enableStatistics;
|
EnableStatistics = _config.enableStatistics;
|
||||||
EnableSecurityProtocolTls13 = _config.enableSecurityProtocolTls13;
|
EnableSecurityProtocolTls13 = _config.enableSecurityProtocolTls13;
|
||||||
autoUpdateSubInterval = _config.autoUpdateSubInterval;
|
autoUpdateSubInterval = _config.autoUpdateSubInterval;
|
||||||
@@ -196,6 +196,7 @@ namespace clashN.ViewModels
|
|||||||
|
|
||||||
//clashN
|
//clashN
|
||||||
Utils.SetAutoRun(AutoRun);
|
Utils.SetAutoRun(AutoRun);
|
||||||
|
_config.autoRun = AutoRun;
|
||||||
_config.enableStatistics = EnableStatistics;
|
_config.enableStatistics = EnableStatistics;
|
||||||
_config.enableSecurityProtocolTls13 = EnableSecurityProtocolTls13;
|
_config.enableSecurityProtocolTls13 = EnableSecurityProtocolTls13;
|
||||||
_config.autoUpdateSubInterval = autoUpdateSubInterval;
|
_config.autoUpdateSubInterval = autoUpdateSubInterval;
|
||||||
|
|||||||
@@ -20,7 +20,8 @@
|
|||||||
<PackageReference Include="NHotkey" Version="2.1.0" />
|
<PackageReference Include="NHotkey" Version="2.1.0" />
|
||||||
<PackageReference Include="NHotkey.Wpf" Version="2.1.0" />
|
<PackageReference Include="NHotkey.Wpf" Version="2.1.0" />
|
||||||
<PackageReference Include="QRCoder.Xaml" Version="1.4.3" />
|
<PackageReference Include="QRCoder.Xaml" Version="1.4.3" />
|
||||||
<PackageReference Include="YamlDotNet" Version="12.0.1" />
|
<PackageReference Include="TaskScheduler" Version="2.10.1" />
|
||||||
|
<PackageReference Include="YamlDotNet" Version="12.0.2" />
|
||||||
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.10" />
|
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.10" />
|
||||||
<PackageReference Include="ReactiveUI.Fody" Version="18.3.1" />
|
<PackageReference Include="ReactiveUI.Fody" Version="18.3.1" />
|
||||||
<PackageReference Include="ReactiveUI.Validation" Version="3.0.1" />
|
<PackageReference Include="ReactiveUI.Validation" Version="3.0.1" />
|
||||||
|
|||||||
Reference in New Issue
Block a user