From 07f48747eb099673527dd6e7143b651aa4cacca7 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 09:28:32 -0400 Subject: [PATCH 01/14] Initial kinda working implementation. --- ShareX/Forms/ApplicationSettingsForm.cs | 100 ++++-------------- ShareX/Properties/Resources.Designer.cs | 9 ++ ShareX/Properties/Resources.resx | 3 + ShareX/ShareX.csproj | 4 + .../CentennialStartupManager.cs | 30 ++++++ .../StartupManagers/DesktopStartupManager.cs | 22 ++++ ShareX/StartupManagers/IStartupManager.cs | 11 ++ .../StartupManagers/StartupManagerFactory.cs | 19 ++++ 8 files changed, 116 insertions(+), 82 deletions(-) create mode 100644 ShareX/StartupManagers/CentennialStartupManager.cs create mode 100644 ShareX/StartupManagers/DesktopStartupManager.cs create mode 100644 ShareX/StartupManagers/IStartupManager.cs create mode 100644 ShareX/StartupManagers/StartupManagerFactory.cs diff --git a/ShareX/Forms/ApplicationSettingsForm.cs b/ShareX/Forms/ApplicationSettingsForm.cs index 63f4c0441..42f6b299f 100644 --- a/ShareX/Forms/ApplicationSettingsForm.cs +++ b/ShareX/Forms/ApplicationSettingsForm.cs @@ -25,6 +25,7 @@ using ShareX.HelpersLib; using ShareX.Properties; +using ShareX.StartupManagers; using ShareX.UploadersLib; using System; using System.Drawing; @@ -40,6 +41,8 @@ public partial class ApplicationSettingsForm : Form private bool ready; private string lastPersonalPath; + private IStartupManager startupManager = StartupManagerFactory.GetStartupManager(); + public ApplicationSettingsForm() { InitializeControls(); @@ -70,12 +73,10 @@ private void SettingsForm_FormClosed(object sender, FormClosedEventArgs e) private void tttvMain_TabChanged(TabPage tabPage) { -#if WindowsStore if (tabPage == tpIntegration) { - CheckWindowsStoreStartup(); + UpdateStartWithWindows(); } -#endif } private void InitializeControls() @@ -131,13 +132,11 @@ private void UpdateControls() // Integration #if WindowsStore - cbStartWithWindows.Enabled = false; cbShellContextMenu.Visible = false; cbSendToMenu.Visible = false; gbChrome.Visible = false; gbFirefox.Visible = false; #else - cbStartWithWindows.Checked = IntegrationHelpers.CheckStartupShortcut(); cbShellContextMenu.Checked = IntegrationHelpers.CheckShellContextMenuButton(); cbSendToMenu.Checked = IntegrationHelpers.CheckSendToMenuButton(); cbChromeExtensionSupport.Checked = IntegrationHelpers.CheckChromeExtensionSupport(); @@ -146,6 +145,8 @@ private void UpdateControls() btnFirefoxOpenAddonPage.Enabled = cbFirefoxAddonSupport.Checked; #endif + UpdateStartWithWindows(); + #if STEAM cbSteamShowInApp.Checked = IntegrationHelpers.CheckSteamShowInApp(); #else @@ -251,6 +252,17 @@ private void ChangeLanguage(SupportedLanguage language) } } + private void UpdateStartWithWindows() + { + StartupTaskState state = startupManager.State; + cbStartWithWindows.Checked = state == StartupTaskState.Enabled; + if (state == StartupTaskState.DisabledByUser) + { + cbStartWithWindows.Enabled = false; + lblWindowsStoreStartupStatus.Text = Resources.ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser; + } + } + private void UpdateProxyControls() { switch (Program.Settings.ProxySettings.ProxyMethod) @@ -301,78 +313,6 @@ private void UpdateExportButton() btnExport.Enabled = Program.Settings.ExportSettings || Program.Settings.ExportHistory || Program.Settings.ExportLogs; } - private void CheckWindowsStoreStartup() - { - if (cbStartWithWindows.Enabled) return; - - lblWindowsStoreStartupStatus.Text = "Checking startup state..."; - lblWindowsStoreStartupStatus.Visible = true; - - StartupTaskState state = StartupTaskState.Error; - - TaskEx.Run(() => - { - state = IntegrationHelpers.CheckStartupWindowsStore(); - }, - () => - { - if (!IsDisposed) - { - if (state == StartupTaskState.Error) - { - lblWindowsStoreStartupStatus.Text = "Startup state check failed. Check debug log for more info."; - } - else if (state == StartupTaskState.DisabledByUser) - { - lblWindowsStoreStartupStatus.Text = "The startup has been disabled by the user."; - } - else - { - lblWindowsStoreStartupStatus.Visible = false; - cbStartWithWindows.Checked = state == StartupTaskState.Enabled; - cbStartWithWindows.Enabled = true; - } - } - }); - } - - private void ConfigureWindowsStoreStartup() - { - if (cbStartWithWindows.Enabled) - { - cbStartWithWindows.Enabled = false; - lblWindowsStoreStartupStatus.Text = "Configuring startup..."; - lblWindowsStoreStartupStatus.Visible = true; - - bool enable = cbStartWithWindows.Checked; - StartupTaskState state = StartupTaskState.Error; - - TaskEx.Run(() => - { - state = IntegrationHelpers.ConfigureStartupWindowsStore(enable); - }, - () => - { - if (!IsDisposed) - { - if (state == StartupTaskState.Error) - { - lblWindowsStoreStartupStatus.Text = "Startup configuration failed. Check debug log for more info."; - } - else if (state == StartupTaskState.DisabledByUser) - { - lblWindowsStoreStartupStatus.Text = "The startup has been disabled by the user."; - } - else - { - lblWindowsStoreStartupStatus.Visible = false; - cbStartWithWindows.Enabled = true; - } - } - }); - } - } - #region General private void cbShowTray_CheckedChanged(object sender, EventArgs e) @@ -450,11 +390,7 @@ private void cbStartWithWindows_CheckedChanged(object sender, EventArgs e) { if (ready) { -#if WindowsStore - ConfigureWindowsStoreStartup(); -#else - IntegrationHelpers.CreateStartupShortcut(cbStartWithWindows.Checked); -#endif + startupManager.State = cbStartWithWindows.Checked ? StartupTaskState.Enabled : StartupTaskState.Disabled; } } diff --git a/ShareX/Properties/Resources.Designer.cs b/ShareX/Properties/Resources.Designer.cs index 5fd96c9be..f43f8c64a 100644 --- a/ShareX/Properties/Resources.Designer.cs +++ b/ShareX/Properties/Resources.Designer.cs @@ -474,6 +474,15 @@ public class Resources { } } + /// + /// Looks up a localized string similar to Startup has been disabled in Task Manager.. + /// + public static string ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser { + get { + return ResourceManager.GetString("ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/ShareX/Properties/Resources.resx b/ShareX/Properties/Resources.resx index f01b403ed..194b58489 100644 --- a/ShareX/Properties/Resources.resx +++ b/ShareX/Properties/Resources.resx @@ -960,4 +960,7 @@ Middle click to close Input text to encode + + Startup has been disabled in Task Manager. + \ No newline at end of file diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 253bd6879..671400149 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -309,6 +309,10 @@ + + + + diff --git a/ShareX/StartupManagers/CentennialStartupManager.cs b/ShareX/StartupManagers/CentennialStartupManager.cs new file mode 100644 index 000000000..7e8ee9275 --- /dev/null +++ b/ShareX/StartupManagers/CentennialStartupManager.cs @@ -0,0 +1,30 @@ +using ShareX.HelpersLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ShareX.StartupManagers +{ + class CentennialStartupManager : IStartupManager + { + public StartupTaskState State + { + get => IntegrationHelpers.CheckStartupWindowsStore(); + set + { + bool enable; + if (value == StartupTaskState.Enabled) + { + enable = true; + } + else + { + enable = false; + } + + IntegrationHelpers.ConfigureStartupWindowsStore(enable); + } + } + } +} diff --git a/ShareX/StartupManagers/DesktopStartupManager.cs b/ShareX/StartupManagers/DesktopStartupManager.cs new file mode 100644 index 000000000..fed617eb0 --- /dev/null +++ b/ShareX/StartupManagers/DesktopStartupManager.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ShareX.StartupManagers +{ + class DesktopStartupManager : IStartupManager + { + public StartupTaskState State + { + get => IntegrationHelpers.CheckStartupShortcut() ? StartupTaskState.Enabled : StartupTaskState.Disabled; + set + { + if (value == StartupTaskState.Disabled) + IntegrationHelpers.CreateStartupShortcut(false); + else if (value == StartupTaskState.Enabled) + IntegrationHelpers.CreateStartupShortcut(true); + } + } + } +} diff --git a/ShareX/StartupManagers/IStartupManager.cs b/ShareX/StartupManagers/IStartupManager.cs new file mode 100644 index 000000000..6532fd431 --- /dev/null +++ b/ShareX/StartupManagers/IStartupManager.cs @@ -0,0 +1,11 @@ +namespace ShareX.StartupManagers +{ + interface IStartupManager + { + StartupTaskState State + { + get; + set; + } + } +} diff --git a/ShareX/StartupManagers/StartupManagerFactory.cs b/ShareX/StartupManagers/StartupManagerFactory.cs new file mode 100644 index 000000000..63bda7ebd --- /dev/null +++ b/ShareX/StartupManagers/StartupManagerFactory.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ShareX.StartupManagers +{ + class StartupManagerFactory + { + static public IStartupManager GetStartupManager() + { +#if WindowsStore + return new CentennialStartupManager(); +#else + return new DesktopStartupManager(); +#endif + } + } +} From 52cbee23171f3ac70adcf7eba48a2ef40ee77174 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 10:59:29 -0400 Subject: [PATCH 02/14] Remove dead code, move logic into Desktop implementation, and implement Steam --- ShareX/IntegrationHelpers.cs | 59 ------------------- .../CentennialStartupManager.cs | 16 +---- .../StartupManagers/DesktopStartupManager.cs | 17 ++---- .../StartupManagers/StartupManagerFactory.cs | 16 ++++- 4 files changed, 21 insertions(+), 87 deletions(-) diff --git a/ShareX/IntegrationHelpers.cs b/ShareX/IntegrationHelpers.cs index 8bd92e3be..3fa621bfc 100644 --- a/ShareX/IntegrationHelpers.cs +++ b/ShareX/IntegrationHelpers.cs @@ -40,16 +40,6 @@ public static class IntegrationHelpers private static readonly string ApplicationName = "ShareX"; private static readonly string ApplicationPath = string.Format("\"{0}\"", Application.ExecutablePath); - private static readonly string StartupTargetPath = -#if STEAM - Helpers.GetAbsolutePath("../ShareX_Launcher.exe"); -#else - Application.ExecutablePath; -#endif - - private static readonly string StartupRegistryPath = @"Software\Microsoft\Windows\CurrentVersion\Run"; - private static readonly string StartupRegistryValue = $"\"{StartupTargetPath}\" -silent"; - private static readonly string ShellExtMenuFiles = @"Software\Classes\*\shell\" + ApplicationName; private static readonly string ShellExtMenuFilesCmd = ShellExtMenuFiles + @"\command"; @@ -75,55 +65,6 @@ public static class IntegrationHelpers private static readonly string ChromeNativeMessagingHosts = @"SOFTWARE\Google\Chrome\NativeMessagingHosts\com.getsharex.sharex"; private static readonly string FirefoxNativeMessagingHosts = @"SOFTWARE\Mozilla\NativeMessagingHosts\ShareX"; - public static bool CheckStartupShortcut() - { - return ShortcutHelpers.CheckShortcut(Environment.SpecialFolder.Startup, StartupTargetPath); - } - - public static bool CreateStartupShortcut(bool create) - { - return ShortcutHelpers.SetShortcut(create, Environment.SpecialFolder.Startup, StartupTargetPath, "-silent"); - } - - public static bool CheckStartWithWindows() - { - try - { - return RegistryHelpers.CheckRegistry(StartupRegistryPath, ApplicationName, StartupRegistryValue); - } - catch (Exception e) - { - DebugHelper.WriteException(e); - } - - return false; - } - - public static void CreateStartWithWindows(bool create) - { - try - { - using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(StartupRegistryPath, true)) - { - if (rk != null) - { - if (create) - { - rk.SetValue(ApplicationName, StartupRegistryValue, RegistryValueKind.String); - } - else - { - rk.DeleteValue(ApplicationName, false); - } - } - } - } - catch (Exception e) - { - DebugHelper.WriteException(e); - } - } - private static StartupTaskState RunStartupWindowsStore(string argument, string info) { string filepath = Helpers.GetAbsolutePath("ShareX_DesktopBridgeHelper.exe"); diff --git a/ShareX/StartupManagers/CentennialStartupManager.cs b/ShareX/StartupManagers/CentennialStartupManager.cs index 7e8ee9275..dfedb4d89 100644 --- a/ShareX/StartupManagers/CentennialStartupManager.cs +++ b/ShareX/StartupManagers/CentennialStartupManager.cs @@ -8,23 +8,11 @@ namespace ShareX.StartupManagers { class CentennialStartupManager : IStartupManager { + public int StartupTargetIndex; public StartupTaskState State { get => IntegrationHelpers.CheckStartupWindowsStore(); - set - { - bool enable; - if (value == StartupTaskState.Enabled) - { - enable = true; - } - else - { - enable = false; - } - - IntegrationHelpers.ConfigureStartupWindowsStore(enable); - } + set => IntegrationHelpers.ConfigureStartupWindowsStore(value == StartupTaskState.Enabled); } } } diff --git a/ShareX/StartupManagers/DesktopStartupManager.cs b/ShareX/StartupManagers/DesktopStartupManager.cs index fed617eb0..f68178b20 100644 --- a/ShareX/StartupManagers/DesktopStartupManager.cs +++ b/ShareX/StartupManagers/DesktopStartupManager.cs @@ -1,22 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using ShareX.HelpersLib; +using System; namespace ShareX.StartupManagers { class DesktopStartupManager : IStartupManager { + public string StartupTargetPath; public StartupTaskState State { - get => IntegrationHelpers.CheckStartupShortcut() ? StartupTaskState.Enabled : StartupTaskState.Disabled; - set - { - if (value == StartupTaskState.Disabled) - IntegrationHelpers.CreateStartupShortcut(false); - else if (value == StartupTaskState.Enabled) - IntegrationHelpers.CreateStartupShortcut(true); - } + get => ShortcutHelpers.CheckShortcut(Environment.SpecialFolder.Startup, StartupTargetPath) ? StartupTaskState.Enabled : StartupTaskState.Disabled; + set => ShortcutHelpers.SetShortcut(value == StartupTaskState.Enabled, Environment.SpecialFolder.Startup, StartupTargetPath, "-silent"); } } } diff --git a/ShareX/StartupManagers/StartupManagerFactory.cs b/ShareX/StartupManagers/StartupManagerFactory.cs index 63bda7ebd..d18fee93f 100644 --- a/ShareX/StartupManagers/StartupManagerFactory.cs +++ b/ShareX/StartupManagers/StartupManagerFactory.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Windows.Forms; namespace ShareX.StartupManagers { @@ -10,9 +11,20 @@ class StartupManagerFactory static public IStartupManager GetStartupManager() { #if WindowsStore - return new CentennialStartupManager(); + return new CentennialStartupManager() + { + StartupTargetIndex = 0 + }; +#elif STEAM + return new DesktopStartupManager() + { + StartupTargetPath = Helpers.GetAbsolutePath("../ShareX_Launcher.exe") + }; #else - return new DesktopStartupManager(); + return new DesktopStartupManager() + { + StartupTargetPath = Application.ExecutablePath + }; #endif } } From 6d85e813e2e3e27fc65c95235974254e80f91b6e Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 11:57:33 -0400 Subject: [PATCH 03/14] Fix AppVeyor build --- ShareX/Forms/FirstTimeConfigForm.cs | 9 +++++++-- ShareX/IntegrationHelpers.cs | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ShareX/Forms/FirstTimeConfigForm.cs b/ShareX/Forms/FirstTimeConfigForm.cs index e4674e64f..4692622db 100644 --- a/ShareX/Forms/FirstTimeConfigForm.cs +++ b/ShareX/Forms/FirstTimeConfigForm.cs @@ -24,6 +24,7 @@ #endregion License Information (GPL v3) using ShareX.HelpersLib; +using ShareX.StartupManagers; using System; using System.Windows.Forms; @@ -32,13 +33,17 @@ namespace ShareX public partial class FirstTimeConfigForm : BlackStyleForm { private bool loaded; + private IStartupManager startupManager = StartupManagerFactory.GetStartupManager(); public FirstTimeConfigForm() { InitializeComponent(); pbLogo.Image = ImageHelpers.ResizeImage(ShareXResources.Logo, 128, 128); + StartupTaskState state = startupManager.State; + + cbRunStartup.Checked = state == StartupTaskState.Enabled; + cbRunStartup.Enabled = state != StartupTaskState.DisabledByUser; - cbRunStartup.Checked = IntegrationHelpers.CheckStartupShortcut(); cbShellContextMenuButton.Checked = IntegrationHelpers.CheckShellContextMenuButton(); cbSendToMenu.Checked = IntegrationHelpers.CheckSendToMenuButton(); @@ -60,7 +65,7 @@ private void cbRunStartup_CheckedChanged(object sender, EventArgs e) { if (loaded) { - IntegrationHelpers.CreateStartupShortcut(cbRunStartup.Checked); + startupManager.State = cbRunStartup.Checked ? StartupTaskState.Enabled : StartupTaskState.Disabled; } } diff --git a/ShareX/IntegrationHelpers.cs b/ShareX/IntegrationHelpers.cs index 3fa621bfc..4199ec9d6 100644 --- a/ShareX/IntegrationHelpers.cs +++ b/ShareX/IntegrationHelpers.cs @@ -27,6 +27,7 @@ using Newtonsoft.Json; using ShareX.HelpersLib; using ShareX.Properties; +using ShareX.StartupManagers; using System; using System.Diagnostics; using System.IO; @@ -400,7 +401,7 @@ public static void SteamShowInApp(bool showInApp) public static void Uninstall() { - CreateStartupShortcut(false); + StartupManagerFactory.GetStartupManager().State = StartupTaskState.Disabled; CreateShellContextMenuButton(false); CreateCustomUploaderExtension(false); CreateSendToMenuButton(false); From 63f526857d14eec7519be60d6651285e5e8a347d Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 12:04:49 -0400 Subject: [PATCH 04/14] Fix Steam build --- ShareX/StartupManagers/StartupManagerFactory.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ShareX/StartupManagers/StartupManagerFactory.cs b/ShareX/StartupManagers/StartupManagerFactory.cs index d18fee93f..94c8895c6 100644 --- a/ShareX/StartupManagers/StartupManagerFactory.cs +++ b/ShareX/StartupManagers/StartupManagerFactory.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using ShareX.HelpersLib; using System.Windows.Forms; namespace ShareX.StartupManagers From 47170b90feda741f4c66c7f3dad175f1dd1a8da1 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 12:29:11 -0400 Subject: [PATCH 05/14] Prevent compiler warning when class isn't used --- ShareX/StartupManagers/CentennialStartupManager.cs | 8 ++------ ShareX/StartupManagers/DesktopStartupManager.cs | 4 +++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ShareX/StartupManagers/CentennialStartupManager.cs b/ShareX/StartupManagers/CentennialStartupManager.cs index dfedb4d89..a63a203ba 100644 --- a/ShareX/StartupManagers/CentennialStartupManager.cs +++ b/ShareX/StartupManagers/CentennialStartupManager.cs @@ -1,9 +1,4 @@ -using ShareX.HelpersLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - +#if WindowsStore namespace ShareX.StartupManagers { class CentennialStartupManager : IStartupManager @@ -16,3 +11,4 @@ public StartupTaskState State } } } +#endif \ No newline at end of file diff --git a/ShareX/StartupManagers/DesktopStartupManager.cs b/ShareX/StartupManagers/DesktopStartupManager.cs index f68178b20..980348c12 100644 --- a/ShareX/StartupManagers/DesktopStartupManager.cs +++ b/ShareX/StartupManagers/DesktopStartupManager.cs @@ -1,4 +1,5 @@ -using ShareX.HelpersLib; +#if !WindowsStore +using ShareX.HelpersLib; using System; namespace ShareX.StartupManagers @@ -13,3 +14,4 @@ public StartupTaskState State } } } +#endif \ No newline at end of file From 86c49c42c01ef8d4a568a538fc2fe1f47fc78369 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 12:48:14 -0400 Subject: [PATCH 06/14] Include the UWP APIs on Store builds --- ShareX/ShareX.csproj | 18 ++++++++++++++++++ .../StartupManagers/StartupManagerFactory.cs | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 671400149..33de1a962 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -83,6 +83,7 @@ Off prompt MinimumRecommendedRules.ruleset + v4.6.2 true @@ -93,6 +94,7 @@ Off prompt MinimumRecommendedRules.ruleset + v4.6.2 @@ -110,10 +112,26 @@ + + False + $(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll + + + False + $(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll + + + $(MSBuildProgramFiles32)\Windows Kits\10\UnionMetadata\Windows.winmd + False + + + $(MSBuildProgramFiles32)\Windows Kits\10\UnionMetadata\Windows.winmd + False + ..\packages\ZXing.Net.0.16.0\lib\net40\zxing.dll diff --git a/ShareX/StartupManagers/StartupManagerFactory.cs b/ShareX/StartupManagers/StartupManagerFactory.cs index 94c8895c6..de17df607 100644 --- a/ShareX/StartupManagers/StartupManagerFactory.cs +++ b/ShareX/StartupManagers/StartupManagerFactory.cs @@ -1,4 +1,4 @@ -using ShareX.HelpersLib; +using ShareX.HelpersLib; // Don't remove this, it's required for the Steam build using System.Windows.Forms; namespace ShareX.StartupManagers From 5c9782cc66b5a601aa58b322a2c09b68b4b332b8 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 15:10:28 -0400 Subject: [PATCH 07/14] Implement CentennialStartupManager --- ShareX/IntegrationHelpers.cs | 51 ------------------- .../CentennialStartupManager.cs | 21 +++++++- 2 files changed, 19 insertions(+), 53 deletions(-) diff --git a/ShareX/IntegrationHelpers.cs b/ShareX/IntegrationHelpers.cs index 4199ec9d6..f279471b9 100644 --- a/ShareX/IntegrationHelpers.cs +++ b/ShareX/IntegrationHelpers.cs @@ -66,57 +66,6 @@ public static class IntegrationHelpers private static readonly string ChromeNativeMessagingHosts = @"SOFTWARE\Google\Chrome\NativeMessagingHosts\com.getsharex.sharex"; private static readonly string FirefoxNativeMessagingHosts = @"SOFTWARE\Mozilla\NativeMessagingHosts\ShareX"; - private static StartupTaskState RunStartupWindowsStore(string argument, string info) - { - string filepath = Helpers.GetAbsolutePath("ShareX_DesktopBridgeHelper.exe"); - - if (!string.IsNullOrEmpty(filepath) && File.Exists(filepath)) - { - try - { - DebugHelper.WriteLine($"Start: {filepath} {argument}"); - - ProcessStartInfo startInfo = new ProcessStartInfo() - { - FileName = filepath, - Arguments = argument, - UseShellExecute = false, - CreateNoWindow = true - }; - - Process process = Process.Start(startInfo); - - if (process.WaitForExit(5000)) - { - int code = process.ExitCode; - - DebugHelper.WriteLine($"{info} result: {code}"); - - if (code > -1) - { - return (StartupTaskState)code; - } - } - } - catch (Exception e) - { - DebugHelper.WriteException(e, $"{info} failed"); - } - } - - return StartupTaskState.Error; - } - - public static StartupTaskState CheckStartupWindowsStore() - { - return RunStartupWindowsStore("-StartupState", "Startup state check"); - } - - public static StartupTaskState ConfigureStartupWindowsStore(bool enable) - { - return RunStartupWindowsStore(enable ? "-StartupEnable" : "-StartupDisable", "Startup configuration"); - } - public static bool CheckShellContextMenuButton() { try diff --git a/ShareX/StartupManagers/CentennialStartupManager.cs b/ShareX/StartupManagers/CentennialStartupManager.cs index a63a203ba..ce6ec6c18 100644 --- a/ShareX/StartupManagers/CentennialStartupManager.cs +++ b/ShareX/StartupManagers/CentennialStartupManager.cs @@ -1,4 +1,7 @@ #if WindowsStore +using System; +using Windows.ApplicationModel; + namespace ShareX.StartupManagers { class CentennialStartupManager : IStartupManager @@ -6,8 +9,22 @@ class CentennialStartupManager : IStartupManager public int StartupTargetIndex; public StartupTaskState State { - get => IntegrationHelpers.CheckStartupWindowsStore(); - set => IntegrationHelpers.ConfigureStartupWindowsStore(value == StartupTaskState.Enabled); + get => (StartupTaskState)StartupTask.GetForCurrentPackageAsync().GetResults()[StartupTargetIndex].State; + set + { + if (value == StartupTaskState.Enabled) + { + StartupTask.GetForCurrentPackageAsync().GetResults()[StartupTargetIndex].RequestEnableAsync().GetResults(); + } + else if (value == StartupTaskState.Disabled) + { + StartupTask.GetForCurrentPackageAsync().GetResults()[StartupTargetIndex].Disable(); + } + else + { + throw new NotSupportedException(); + } + } } } } From df8712d8884ade5293f4a5501a0e6e359ab361cf Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 15:14:04 -0400 Subject: [PATCH 08/14] Throw on DesktopStartupManager too --- ShareX/StartupManagers/DesktopStartupManager.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ShareX/StartupManagers/DesktopStartupManager.cs b/ShareX/StartupManagers/DesktopStartupManager.cs index 980348c12..cd7256a36 100644 --- a/ShareX/StartupManagers/DesktopStartupManager.cs +++ b/ShareX/StartupManagers/DesktopStartupManager.cs @@ -10,7 +10,17 @@ class DesktopStartupManager : IStartupManager public StartupTaskState State { get => ShortcutHelpers.CheckShortcut(Environment.SpecialFolder.Startup, StartupTargetPath) ? StartupTaskState.Enabled : StartupTaskState.Disabled; - set => ShortcutHelpers.SetShortcut(value == StartupTaskState.Enabled, Environment.SpecialFolder.Startup, StartupTargetPath, "-silent"); + set + { + if (value == StartupTaskState.Enabled || value == StartupTaskState.Disabled) + { + ShortcutHelpers.SetShortcut(value == StartupTaskState.Enabled, Environment.SpecialFolder.Startup, StartupTargetPath, "-silent"); + } + else + { + throw new NotSupportedException(); + } + } } } } From 2866c3e032a41ed99fea6f599966d6c6c42c2417 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 16:40:37 -0400 Subject: [PATCH 09/14] Remove now obsolete code from DesktopBridgeHelper --- ShareX.DesktopBridgeHelper/App.config | 6 -- ShareX.DesktopBridgeHelper/Program.cs | 64 +------------------ .../ShareX.DesktopBridgeHelper.csproj | 17 ----- 3 files changed, 3 insertions(+), 84 deletions(-) delete mode 100644 ShareX.DesktopBridgeHelper/App.config diff --git a/ShareX.DesktopBridgeHelper/App.config b/ShareX.DesktopBridgeHelper/App.config deleted file mode 100644 index bae5d6d81..000000000 --- a/ShareX.DesktopBridgeHelper/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/ShareX.DesktopBridgeHelper/Program.cs b/ShareX.DesktopBridgeHelper/Program.cs index bda8aca1f..d97a8cf6e 100644 --- a/ShareX.DesktopBridgeHelper/Program.cs +++ b/ShareX.DesktopBridgeHelper/Program.cs @@ -26,74 +26,16 @@ using System; using System.Diagnostics; using System.IO; -using System.Threading.Tasks; -using Windows.ApplicationModel; namespace DesktopBridgeHelper { internal class Program { - private const string TaskID = "ShareX"; - private static int Main(string[] args) { - return MainAsync(args).GetAwaiter().GetResult(); - } - - private async static Task MainAsync(string[] args) - { - try - { - if (args.Length > 0) - { - string argument = args[0]; - - if (argument.Equals("-StartupState", StringComparison.InvariantCultureIgnoreCase)) - { - return (int)await GetStartupState(); - } - else if (argument.Equals("-StartupEnable", StringComparison.InvariantCultureIgnoreCase)) - { - return (int)await SetStartupState(true); - } - else if (argument.Equals("-StartupDisable", StringComparison.InvariantCultureIgnoreCase)) - { - return (int)await SetStartupState(false); - } - } - else - { - string path = GetAbsolutePath("ShareX.exe"); - Process.Start(path, "-silent"); - return 0; - } - } - catch - { - } - - return -1; - } - - private async static Task GetStartupState() - { - StartupTask startupTask = await StartupTask.GetAsync(TaskID); - return startupTask.State; - } - - private async static Task SetStartupState(bool enable) - { - StartupTask startupTask = await StartupTask.GetAsync(TaskID); - - if (enable) - { - return await startupTask.RequestEnableAsync(); - } - else - { - startupTask.Disable(); - return StartupTaskState.Disabled; - } + string path = GetAbsolutePath("ShareX.exe"); + Process.Start(path, "-silent"); + return 0; } private static string GetAbsolutePath(string path) diff --git a/ShareX.DesktopBridgeHelper/ShareX.DesktopBridgeHelper.csproj b/ShareX.DesktopBridgeHelper/ShareX.DesktopBridgeHelper.csproj index f051b0dc5..e28205700 100644 --- a/ShareX.DesktopBridgeHelper/ShareX.DesktopBridgeHelper.csproj +++ b/ShareX.DesktopBridgeHelper/ShareX.DesktopBridgeHelper.csproj @@ -37,27 +37,10 @@ - - False - C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll - - - False - C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Facade\Windows.WinMD - - - C:\Program Files (x86)\Windows Kits\10\References\10.0.15063.0\Windows.ApplicationModel.StartupTaskContract\1.0.0.0\Windows.ApplicationModel.StartupTaskContract.winmd - - - C:\Program Files (x86)\Windows Kits\10\References\10.0.15063.0\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd - - - - \ No newline at end of file From 347d768f2d232a192151633cc02026216c5229c1 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 17:21:44 -0400 Subject: [PATCH 10/14] Use or operator --- ShareX/ShareX.csproj | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 33de1a962..80c7a3296 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -112,11 +112,7 @@ - - False - $(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll - - + False $(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll @@ -124,11 +120,7 @@ - - $(MSBuildProgramFiles32)\Windows Kits\10\UnionMetadata\Windows.winmd - False - - + $(MSBuildProgramFiles32)\Windows Kits\10\UnionMetadata\Windows.winmd False From 887d25138f80cc84397fed8b121c92f968a79181 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 17:45:52 -0400 Subject: [PATCH 11/14] Remove unused enum field and UpdateStartWithWindows call in InitializeComponent --- ShareX/Enums.cs | 1 - ShareX/Forms/ApplicationSettingsForm.cs | 2 -- 2 files changed, 3 deletions(-) diff --git a/ShareX/Enums.cs b/ShareX/Enums.cs index 7e9ba362d..30dc6170a 100644 --- a/ShareX/Enums.cs +++ b/ShareX/Enums.cs @@ -262,7 +262,6 @@ public enum RegionCaptureType public enum StartupTaskState { - Error = -1, Disabled = 0, DisabledByUser = 1, Enabled = 2 diff --git a/ShareX/Forms/ApplicationSettingsForm.cs b/ShareX/Forms/ApplicationSettingsForm.cs index 42f6b299f..074b8df38 100644 --- a/ShareX/Forms/ApplicationSettingsForm.cs +++ b/ShareX/Forms/ApplicationSettingsForm.cs @@ -145,8 +145,6 @@ private void UpdateControls() btnFirefoxOpenAddonPage.Enabled = cbFirefoxAddonSupport.Checked; #endif - UpdateStartWithWindows(); - #if STEAM cbSteamShowInApp.Checked = IntegrationHelpers.CheckSteamShowInApp(); #else From 8f65b994fb4f7eaa02e1a6dfaabe25428182c613 Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 17:55:32 -0400 Subject: [PATCH 12/14] Misceneallous code cleanups --- ShareX/StartupManagers/CentennialStartupManager.cs | 2 +- ShareX/StartupManagers/DesktopStartupManager.cs | 2 +- ShareX/StartupManagers/IStartupManager.cs | 8 ++------ ShareX/StartupManagers/StartupManagerFactory.cs | 4 ++-- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ShareX/StartupManagers/CentennialStartupManager.cs b/ShareX/StartupManagers/CentennialStartupManager.cs index ce6ec6c18..8796229f5 100644 --- a/ShareX/StartupManagers/CentennialStartupManager.cs +++ b/ShareX/StartupManagers/CentennialStartupManager.cs @@ -4,7 +4,7 @@ namespace ShareX.StartupManagers { - class CentennialStartupManager : IStartupManager + public class CentennialStartupManager : IStartupManager { public int StartupTargetIndex; public StartupTaskState State diff --git a/ShareX/StartupManagers/DesktopStartupManager.cs b/ShareX/StartupManagers/DesktopStartupManager.cs index cd7256a36..16dd5f80a 100644 --- a/ShareX/StartupManagers/DesktopStartupManager.cs +++ b/ShareX/StartupManagers/DesktopStartupManager.cs @@ -4,7 +4,7 @@ namespace ShareX.StartupManagers { - class DesktopStartupManager : IStartupManager + public class DesktopStartupManager : IStartupManager { public string StartupTargetPath; public StartupTaskState State diff --git a/ShareX/StartupManagers/IStartupManager.cs b/ShareX/StartupManagers/IStartupManager.cs index 6532fd431..42c1f6cfc 100644 --- a/ShareX/StartupManagers/IStartupManager.cs +++ b/ShareX/StartupManagers/IStartupManager.cs @@ -1,11 +1,7 @@ namespace ShareX.StartupManagers { - interface IStartupManager + public interface IStartupManager { - StartupTaskState State - { - get; - set; - } + StartupTaskState State { get; set; } } } diff --git a/ShareX/StartupManagers/StartupManagerFactory.cs b/ShareX/StartupManagers/StartupManagerFactory.cs index de17df607..9147fecb1 100644 --- a/ShareX/StartupManagers/StartupManagerFactory.cs +++ b/ShareX/StartupManagers/StartupManagerFactory.cs @@ -3,9 +3,9 @@ namespace ShareX.StartupManagers { - class StartupManagerFactory + public class StartupManagerFactory { - static public IStartupManager GetStartupManager() + public static IStartupManager GetStartupManager() { #if WindowsStore return new CentennialStartupManager() From a7a904dcc9356a667b1ecde364fe5fe575f02fce Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 17:58:44 -0400 Subject: [PATCH 13/14] Use 4.6.1 instead of 4.6.2 --- ShareX/ShareX.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 80c7a3296..744650ec2 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -83,7 +83,7 @@ Off prompt MinimumRecommendedRules.ruleset - v4.6.2 + v4.6.1 true @@ -94,7 +94,7 @@ Off prompt MinimumRecommendedRules.ruleset - v4.6.2 + v4.6.1 From 61da0a0c223f7ab2f167617fa53111fe0dbe59ac Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Wed, 4 Oct 2017 18:21:32 -0400 Subject: [PATCH 14/14] Make use of abstract class --- ShareX/ShareX.csproj | 2 ++ .../StartupManagers/DesktopStartupManager.cs | 24 +++--------------- .../StartupManagers/GenericStartupManager.cs | 25 +++++++++++++++++++ .../StartupManagers/StartupManagerFactory.cs | 20 +++------------ ShareX/StartupManagers/SteamDesktopManager.cs | 9 +++++++ 5 files changed, 43 insertions(+), 37 deletions(-) create mode 100644 ShareX/StartupManagers/GenericStartupManager.cs create mode 100644 ShareX/StartupManagers/SteamDesktopManager.cs diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 744650ec2..562bf096d 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -321,8 +321,10 @@ + + diff --git a/ShareX/StartupManagers/DesktopStartupManager.cs b/ShareX/StartupManagers/DesktopStartupManager.cs index 16dd5f80a..cb585d67d 100644 --- a/ShareX/StartupManagers/DesktopStartupManager.cs +++ b/ShareX/StartupManagers/DesktopStartupManager.cs @@ -1,27 +1,9 @@ -#if !WindowsStore -using ShareX.HelpersLib; -using System; +using System.Windows.Forms; namespace ShareX.StartupManagers { - public class DesktopStartupManager : IStartupManager + public class DesktopStartupManager : GenericStartupManager { - public string StartupTargetPath; - public StartupTaskState State - { - get => ShortcutHelpers.CheckShortcut(Environment.SpecialFolder.Startup, StartupTargetPath) ? StartupTaskState.Enabled : StartupTaskState.Disabled; - set - { - if (value == StartupTaskState.Enabled || value == StartupTaskState.Disabled) - { - ShortcutHelpers.SetShortcut(value == StartupTaskState.Enabled, Environment.SpecialFolder.Startup, StartupTargetPath, "-silent"); - } - else - { - throw new NotSupportedException(); - } - } - } + public override string StartupTargetPath() => Application.ExecutablePath; } } -#endif \ No newline at end of file diff --git a/ShareX/StartupManagers/GenericStartupManager.cs b/ShareX/StartupManagers/GenericStartupManager.cs new file mode 100644 index 000000000..4bc7b5dc0 --- /dev/null +++ b/ShareX/StartupManagers/GenericStartupManager.cs @@ -0,0 +1,25 @@ +using ShareX.HelpersLib; +using System; + +namespace ShareX.StartupManagers +{ + public abstract class GenericStartupManager : IStartupManager + { + abstract public string StartupTargetPath(); + public StartupTaskState State + { + get => ShortcutHelpers.CheckShortcut(Environment.SpecialFolder.Startup, StartupTargetPath()) ? StartupTaskState.Enabled : StartupTaskState.Disabled; + set + { + if (value == StartupTaskState.Enabled || value == StartupTaskState.Disabled) + { + ShortcutHelpers.SetShortcut(value == StartupTaskState.Enabled, Environment.SpecialFolder.Startup, StartupTargetPath(), "-silent"); + } + else + { + throw new NotSupportedException(); + } + } + } + } +} \ No newline at end of file diff --git a/ShareX/StartupManagers/StartupManagerFactory.cs b/ShareX/StartupManagers/StartupManagerFactory.cs index 9147fecb1..461b815b1 100644 --- a/ShareX/StartupManagers/StartupManagerFactory.cs +++ b/ShareX/StartupManagers/StartupManagerFactory.cs @@ -1,27 +1,15 @@ -using ShareX.HelpersLib; // Don't remove this, it's required for the Steam build -using System.Windows.Forms; - -namespace ShareX.StartupManagers +namespace ShareX.StartupManagers { public class StartupManagerFactory { public static IStartupManager GetStartupManager() { #if WindowsStore - return new CentennialStartupManager() - { - StartupTargetIndex = 0 - }; + return new CentennialStartupManager(); #elif STEAM - return new DesktopStartupManager() - { - StartupTargetPath = Helpers.GetAbsolutePath("../ShareX_Launcher.exe") - }; + return new SteamStartupManager(); #else - return new DesktopStartupManager() - { - StartupTargetPath = Application.ExecutablePath - }; + return new DesktopStartupManager(); #endif } } diff --git a/ShareX/StartupManagers/SteamDesktopManager.cs b/ShareX/StartupManagers/SteamDesktopManager.cs new file mode 100644 index 000000000..2c6f83ad8 --- /dev/null +++ b/ShareX/StartupManagers/SteamDesktopManager.cs @@ -0,0 +1,9 @@ +using ShareX.HelpersLib; + +namespace ShareX.StartupManagers +{ + public class SteamStartupManager : GenericStartupManager + { + public override string StartupTargetPath() => Helpers.GetAbsolutePath("../ShareX_Launcher.exe"); + } +}