1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Windows - Add current user login as trigger to startup task (#737)

Co-authored-by: Robert <mail@rbeekman.nl>
This commit is contained in:
Aytaç Kayadelen 2022-10-12 23:50:02 +03:00 committed by GitHub
parent 4a6721c97e
commit 02cd0dd54c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 10 deletions

View File

@ -14,6 +14,8 @@ namespace Artemis.UI.Windows.Providers;
public class AutoRunProvider : IAutoRunProvider public class AutoRunProvider : IAutoRunProvider
{ {
private readonly string _autorunName = $"Artemis 2 autorun {Environment.UserName}";
private readonly string _oldAutorunName = "Artemis 2 autorun";
private readonly IAssetLoader _assetLoader; private readonly IAssetLoader _assetLoader;
public AutoRunProvider(IAssetLoader assetLoader) public AutoRunProvider(IAssetLoader assetLoader)
@ -21,7 +23,7 @@ public class AutoRunProvider : IAutoRunProvider
_assetLoader = assetLoader; _assetLoader = assetLoader;
} }
private async Task<bool> IsAutoRunTaskCreated() private async Task<bool> IsAutoRunTaskCreated(string autorunName)
{ {
Process schtasks = new() Process schtasks = new()
{ {
@ -30,7 +32,7 @@ public class AutoRunProvider : IAutoRunProvider
WindowStyle = ProcessWindowStyle.Hidden, WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true, UseShellExecute = true,
FileName = Path.Combine(Environment.SystemDirectory, "schtasks.exe"), 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; 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")); 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") task.Descendants().First(d => d.Name.LocalName == "Triggers").Descendants().First(d => d.Name.LocalName == "LogonTrigger").Descendants().First(d => d.Name.LocalName == "Delay")
.SetValue(autoRunDelay); .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") 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); .SetValue(WindowsIdentity.GetCurrent().User!.Value);
@ -76,7 +80,7 @@ public class AutoRunProvider : IAutoRunProvider
UseShellExecute = true, UseShellExecute = true,
Verb = "runas", Verb = "runas",
FileName = Path.Combine(Environment.SystemDirectory, "schtasks.exe"), 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); File.Delete(xmlPath);
} }
private async Task RemoveAutoRunTask() private async Task RemoveAutoRunTask(string autorunName)
{ {
Process schtasks = new() Process schtasks = new()
{ {
@ -96,7 +100,7 @@ public class AutoRunProvider : IAutoRunProvider
UseShellExecute = true, UseShellExecute = true,
Verb = "runas", Verb = "runas",
FileName = Path.Combine(Environment.SystemDirectory, "schtasks.exe"), 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) if (Constants.BuildInfo.IsLocalBuild)
return; return;
await CleanupOldAutorun();
// Create or remove the task if necessary // Create or remove the task if necessary
bool taskCreated = false; bool taskCreated = false;
if (!recreate) if (!recreate)
taskCreated = await IsAutoRunTaskCreated(); taskCreated = await IsAutoRunTaskCreated(_autorunName);
if (!taskCreated) if (!taskCreated)
await CreateAutoRunTask(TimeSpan.FromSeconds(autoRunDelay)); await CreateAutoRunTask(TimeSpan.FromSeconds(autoRunDelay), _autorunName);
} }
/// <inheritdoc /> /// <inheritdoc />
public async Task DisableAutoRun() public async Task DisableAutoRun()
{ {
bool taskCreated = await IsAutoRunTaskCreated(); bool taskCreated = await IsAutoRunTaskCreated(_autorunName);
if (taskCreated) if (taskCreated)
await RemoveAutoRunTask(); await RemoveAutoRunTask(_autorunName);
}
private async Task CleanupOldAutorun()
{
bool taskCreated = await IsAutoRunTaskCreated(_oldAutorunName);
if (taskCreated)
await RemoveAutoRunTask(_oldAutorunName);
} }
} }