From 02cd0dd54c08ef8374b55b8753aa67290bfa6f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ayta=C3=A7=20Kayadelen?= Date: Wed, 12 Oct 2022 23:50:02 +0300 Subject: [PATCH] Windows - Add current user login as trigger to startup task (#737) Co-authored-by: Robert --- src/Artemis.UI.Windows/Assets/autorun.xml | Bin 3410 -> 3504 bytes .../Providers/AutoRunProvider.cs | 33 ++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/Artemis.UI.Windows/Assets/autorun.xml b/src/Artemis.UI.Windows/Assets/autorun.xml index e31980c8baf57014140df2b687258d8853f66c19..bbe5261ad3baa6e7b5cb94ad1d8181820dc228ab 100644 GIT binary patch delta 28 kcmca4wLyA=1oPwvOl*@6F!N2G!)P#Bhec|$1hW+v0FrMAu>b%7 delta 12 TcmdlWeMxGA1oP%HW-BfL9;*ZM diff --git a/src/Artemis.UI.Windows/Providers/AutoRunProvider.cs b/src/Artemis.UI.Windows/Providers/AutoRunProvider.cs index c3fcac0f9..40c2600a4 100644 --- a/src/Artemis.UI.Windows/Providers/AutoRunProvider.cs +++ b/src/Artemis.UI.Windows/Providers/AutoRunProvider.cs @@ -14,6 +14,8 @@ namespace Artemis.UI.Windows.Providers; public class AutoRunProvider : IAutoRunProvider { + private readonly string _autorunName = $"Artemis 2 autorun {Environment.UserName}"; + private readonly string _oldAutorunName = "Artemis 2 autorun"; private readonly IAssetLoader _assetLoader; public AutoRunProvider(IAssetLoader assetLoader) @@ -21,7 +23,7 @@ public class AutoRunProvider : IAutoRunProvider _assetLoader = assetLoader; } - private async Task IsAutoRunTaskCreated() + private async Task IsAutoRunTaskCreated(string autorunName) { Process schtasks = new() { @@ -30,7 +32,7 @@ public class AutoRunProvider : IAutoRunProvider WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = true, FileName = Path.Combine(Environment.SystemDirectory, "schtasks.exe"), - Arguments = "/TN \"Artemis 2 autorun\"" + Arguments = $"/TN \"{autorunName}\"" } }; @@ -39,7 +41,7 @@ public class AutoRunProvider : IAutoRunProvider return schtasks.ExitCode == 0; } - private async Task CreateAutoRunTask(TimeSpan autoRunDelay) + private async Task CreateAutoRunTask(TimeSpan autoRunDelay, string autorunName) { await using Stream taskFile = _assetLoader.Open(new Uri("avares://Artemis.UI.Windows/Assets/autorun.xml")); @@ -53,6 +55,8 @@ public class AutoRunProvider : IAutoRunProvider task.Descendants().First(d => d.Name.LocalName == "Triggers").Descendants().First(d => d.Name.LocalName == "LogonTrigger").Descendants().First(d => d.Name.LocalName == "Delay") .SetValue(autoRunDelay); + task.Descendants().First(d => d.Name.LocalName == "Triggers").Descendants().First(d => d.Name.LocalName == "LogonTrigger").Descendants().First(d => d.Name.LocalName == "UserId") + .SetValue(WindowsIdentity.GetCurrent().Name); task.Descendants().First(d => d.Name.LocalName == "Principals").Descendants().First(d => d.Name.LocalName == "Principal").Descendants().First(d => d.Name.LocalName == "UserId") .SetValue(WindowsIdentity.GetCurrent().User!.Value); @@ -76,7 +80,7 @@ public class AutoRunProvider : IAutoRunProvider UseShellExecute = true, Verb = "runas", FileName = Path.Combine(Environment.SystemDirectory, "schtasks.exe"), - Arguments = $"/Create /XML \"{xmlPath}\" /tn \"Artemis 2 autorun\" /F" + Arguments = $"/Create /XML \"{xmlPath}\" /tn \"{autorunName}\" /F" } }; @@ -86,7 +90,7 @@ public class AutoRunProvider : IAutoRunProvider File.Delete(xmlPath); } - private async Task RemoveAutoRunTask() + private async Task RemoveAutoRunTask(string autorunName) { Process schtasks = new() { @@ -96,7 +100,7 @@ public class AutoRunProvider : IAutoRunProvider UseShellExecute = true, Verb = "runas", FileName = Path.Combine(Environment.SystemDirectory, "schtasks.exe"), - Arguments = "/Delete /TN \"Artemis 2 autorun\" /f" + Arguments = $"/Delete /TN \"{autorunName}\" /f" } }; @@ -110,19 +114,28 @@ public class AutoRunProvider : IAutoRunProvider if (Constants.BuildInfo.IsLocalBuild) return; + await CleanupOldAutorun(); + // Create or remove the task if necessary bool taskCreated = false; if (!recreate) - taskCreated = await IsAutoRunTaskCreated(); + taskCreated = await IsAutoRunTaskCreated(_autorunName); if (!taskCreated) - await CreateAutoRunTask(TimeSpan.FromSeconds(autoRunDelay)); + await CreateAutoRunTask(TimeSpan.FromSeconds(autoRunDelay), _autorunName); } /// public async Task DisableAutoRun() { - bool taskCreated = await IsAutoRunTaskCreated(); + bool taskCreated = await IsAutoRunTaskCreated(_autorunName); if (taskCreated) - await RemoveAutoRunTask(); + await RemoveAutoRunTask(_autorunName); + } + + private async Task CleanupOldAutorun() + { + bool taskCreated = await IsAutoRunTaskCreated(_oldAutorunName); + if (taskCreated) + await RemoveAutoRunTask(_oldAutorunName); } } \ No newline at end of file