Skip to content

Commit

Permalink
fix: self-startup may fail with registry
Browse files Browse the repository at this point in the history
Replace registry-way with task-scheduler-way for better compatibility.
  • Loading branch information
deximy committed Feb 20, 2023
1 parent 90abb20 commit 2c188c1
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
35 changes: 31 additions & 4 deletions SteamServerFilter/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using log4net;
using Microsoft.Win32;
using Microsoft.Win32.TaskScheduler;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
Expand All @@ -18,22 +19,21 @@ static void Main(string[] args)
Visible = true,
ContextMenuStrip = new(),
};
RegistryKey? registry_key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
var auto_start_item = new ToolStripMenuItem() {
Text = "开机自动启动",
Checked = registry_key?.GetValue("SteamServerFilter") == null ? false : true,
Checked = TaskService.Instance.GetFolder("\\").Tasks.Any(task => task.Name == "SteamServerFilter Startup"),
};
auto_start_item.Click += (sender, e) => {
auto_start_item.Checked = !auto_start_item.Checked;
};
auto_start_item.CheckedChanged += (sender, e) => {
if (auto_start_item.Checked)
{
registry_key?.SetValue("SteamServerFilter", Application.ExecutablePath);
EnableAutoRunningWithTaskService();
}
else
{
registry_key?.DeleteValue("SteamServerFilter");
DisableAutoRunningWithTaskService();
}
};
tray_icon.ContextMenuStrip.Items.Add(auto_start_item);
Expand Down Expand Up @@ -105,5 +105,32 @@ static void Main(string[] args)

Application.Run(new ApplicationContext());
}

static void EnableAutoRunningWithTaskService()
{
TaskDefinition task_definition = TaskService.Instance.NewTask();

task_definition.RegistrationInfo.Description = "Run SteamServerFilter when system starts";
task_definition.Settings.Enabled = true;
task_definition.Principal.RunLevel = TaskRunLevel.Highest;

LogonTrigger trigger = (LogonTrigger)task_definition.Triggers.AddNew(TaskTriggerType.Logon);
trigger.Enabled = true;
trigger.Delay = TimeSpan.FromSeconds(30);

ExecAction action = (ExecAction)task_definition.Actions.AddNew(TaskActionType.Execute);
action.Path = $"\"{Application.ExecutablePath}\"";

TaskService.Instance.RootFolder.RegisterTaskDefinition("SteamServerFilter Startup", task_definition);
}

static void DisableAutoRunningWithTaskService()
{
var folder = TaskService.Instance.GetFolder("\\");
if (folder.Tasks.Any(task => task.Name == "SteamServerFilter Startup"))
{
folder.DeleteTask("SteamServerFilter Startup");
}
}
}
}
1 change: 1 addition & 0 deletions SteamServerFilter/SteamServerFilter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

<ItemGroup>
<PackageReference Include="log4net" Version="2.0.15" />
<PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WindivertDotnet" Version="1.1.2" />
</ItemGroup>

Expand Down

0 comments on commit 2c188c1

Please sign in to comment.