diff --git a/src/MSCFixer/App.config b/src/MSCFixer/App.config
new file mode 100644
index 0000000..91126fc
--- /dev/null
+++ b/src/MSCFixer/App.config
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/MSCFixer/AppIcon.ico b/src/MSCFixer/AppIcon.ico
new file mode 100644
index 0000000..e1cc304
Binary files /dev/null and b/src/MSCFixer/AppIcon.ico differ
diff --git a/src/MSCFixer/AppIcon.png b/src/MSCFixer/AppIcon.png
new file mode 100644
index 0000000..9abde57
Binary files /dev/null and b/src/MSCFixer/AppIcon.png differ
diff --git a/src/MSCFixer/AppIcon32.png b/src/MSCFixer/AppIcon32.png
new file mode 100644
index 0000000..d472978
Binary files /dev/null and b/src/MSCFixer/AppIcon32.png differ
diff --git a/src/MSCFixer/FeatureBase.cs b/src/MSCFixer/FeatureBase.cs
index 55788dd..4c77c70 100644
--- a/src/MSCFixer/FeatureBase.cs
+++ b/src/MSCFixer/FeatureBase.cs
@@ -7,8 +7,8 @@ namespace Crapfixer
public abstract string ID();
public abstract string Info();
public abstract string GetFeatureDetails();
- public abstract bool CheckFeature();
- public abstract Task DoFeature(); // async
+ public abstract Task CheckFeature(); // async
+ public abstract Task DoFeature(); // async
public abstract bool UndoFeature();
}
diff --git a/src/MSCFixer/FeatureLoader.cs b/src/MSCFixer/FeatureLoader.cs
index 034067a..b34076c 100644
--- a/src/MSCFixer/FeatureLoader.cs
+++ b/src/MSCFixer/FeatureLoader.cs
@@ -22,6 +22,7 @@ namespace Features
Children =
{
new FeatureNode(new BasicCleanup()),
+ new FeatureNode(new WingetUpgradeAll()) { DefaultChecked = false },
}
},
@@ -70,8 +71,8 @@ namespace Features
new FeatureNode(new StartLayout()),
new FeatureNode(new TaskbarAlignment()),
new FeatureNode(new Transparency()),
- new FeatureNode(new AppDarkMode()),
- new FeatureNode(new SystemDarkMode()),
+ new FeatureNode(new AppDarkMode()) { DefaultChecked = false },
+ new FeatureNode(new SystemDarkMode()) { DefaultChecked = false },
new FeatureNode(new DisableSnapAssistFlyout()),
}
},
diff --git a/src/MSCFixer/FeatureManager.cs b/src/MSCFixer/FeatureManager.cs
index fe8b6e0..52c605e 100644
--- a/src/MSCFixer/FeatureManager.cs
+++ b/src/MSCFixer/FeatureManager.cs
@@ -56,7 +56,7 @@ namespace Crapfixer
TreeNode node = new TreeNode(text)
{
Tag = featureNode,
- Checked = true,
+ Checked = featureNode.DefaultChecked,
};
treeNodes.Add(node);
@@ -67,12 +67,16 @@ namespace Crapfixer
///
/// Analyzes all checked features recursively and logs only issues.
///
- public static void AnalyzeAll(TreeNodeCollection nodes)
+ public static async Task AnalyzeAll(TreeNodeCollection nodes)
{
ResetAnalysis();
+ // Iterate through all nodes and analyze each one recursively
foreach (TreeNode node in nodes)
- AnalyzeCheckedRecursive(node);
+ {
+ // Recursively analyze each node and ensure async tasks are awaited
+ await AnalyzeCheckedRecursive(node);
+ }
Logger.Log("🔎 ANALYSIS COMPLETE", LogLevel.Info);
Logger.Log(new string('=', 50), LogLevel.Info);
@@ -82,46 +86,51 @@ namespace Crapfixer
issuesFound > 0 ? LogLevel.Warning : LogLevel.Info);
}
+ ///
/// Recursively checks all features and logs misconfigurations.
///
- private static void AnalyzeCheckedRecursive(TreeNode node)
+ private static async Task AnalyzeCheckedRecursive(TreeNode node)
{
if (node.Tag is FeatureNode fn)
{
+ // If the node is not a category, is checked, and has a feature to check
if (!fn.IsCategory && node.Checked && fn.Feature != null)
{
totalChecked++;
- bool isOk = fn.Feature.CheckFeature();
+ bool isOk = await fn.Feature.CheckFeature(); // Await the async operation
if (!isOk)
{
issuesFound++;
- node.ForeColor = Color.Red; // misconfigured
+ node.ForeColor = Color.Red; // Mark as misconfigured
string category = node.Parent?.Text ?? "General";
Logger.Log($"❌ [{category}] {fn.Name} - Not configured as recommended.");
Logger.Log($" ➤ {fn.Feature.GetFeatureDetails()}");
- // log a separator when an issue was found
+ // Log a separator when an issue was found
Logger.Log(new string('-', 50), LogLevel.Info);
}
else
{
- node.ForeColor = Color.Gray; // properly configured
+ node.ForeColor = Color.Gray; // Mark as properly configured
}
}
+ // Recursively process child nodes and ensure awaiting the tasks
foreach (TreeNode child in node.Nodes)
- AnalyzeCheckedRecursive(child);
+ {
+ await AnalyzeCheckedRecursive(child); // Recursively call and await the result
+ }
}
}
///
/// Analyzes a selected feature and logs its status.
///
- public static void AnalyzeFeature(TreeNode node)
+ public static async void AnalyzeFeature(TreeNode node)
{
if (node.Tag is FeatureNode fn && !fn.IsCategory && node.Checked && fn.Feature != null)
{
- bool isOk = fn.Feature.CheckFeature();
+ bool isOk = await fn.Feature.CheckFeature();
node.ForeColor = isOk ? Color.Gray : Color.Red;
Logger.Log(isOk
diff --git a/src/MSCFixer/FeatureNode.cs b/src/MSCFixer/FeatureNode.cs
index 891d7fa..b63534f 100644
--- a/src/MSCFixer/FeatureNode.cs
+++ b/src/MSCFixer/FeatureNode.cs
@@ -8,6 +8,10 @@ public class FeatureNode
public FeatureBase Feature { get; }
public List Children { get; set; } = new List();
+
+ // Property to control default checked state
+ public bool DefaultChecked { get; set; } = true;
+
// Constructor for categories
public FeatureNode(string name)
{
diff --git a/src/MSCFixer/Features/AI/CopilotTaskbar.cs b/src/MSCFixer/Features/AI/CopilotTaskbar.cs
index e5879c5..b16a3f2 100644
--- a/src/MSCFixer/Features/AI/CopilotTaskbar.cs
+++ b/src/MSCFixer/Features/AI/CopilotTaskbar.cs
@@ -26,9 +26,9 @@ namespace Settings.AI
return "This feature will disable Copilot in Taskbar.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, 1);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, 1));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/AI/Recall.cs b/src/MSCFixer/Features/AI/Recall.cs
index e0e5c95..b2281f5 100644
--- a/src/MSCFixer/Features/AI/Recall.cs
+++ b/src/MSCFixer/Features/AI/Recall.cs
@@ -27,25 +27,25 @@ namespace Settings.AI
return "This will remove Recall from Windows 11 24H2";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
// Check if reg key exists
object value = Registry.GetValue(keyName, valueName, null);
if (value == null)
{
// Key does not exist, turn off feature
- return false;
+ return Task.FromResult(false);
}
// Key exists, check if value is desired value
- return (int)value != recommendedValue;
+ return Task.FromResult((int)value == recommendedValue);
}
public override Task DoFeature()
{
try
{
- Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
+ Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
Logger.Log("You've even disabled system-wide Snapshots for all users now.", LogLevel.Info);
return Task.FromResult(true);
}
@@ -61,7 +61,7 @@ namespace Settings.AI
{
try
{
- Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
+ Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
return true;
}
catch (Exception ex)
diff --git a/src/MSCFixer/Features/Ads/FileExlorerAds.cs b/src/MSCFixer/Features/Ads/FileExlorerAds.cs
index b1797d8..26cb01f 100644
--- a/src/MSCFixer/Features/Ads/FileExlorerAds.cs
+++ b/src/MSCFixer/Features/Ads/FileExlorerAds.cs
@@ -26,9 +26,9 @@ namespace Settings.Ads
return "This feature will disable ads in File Explorer.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Ads/FinishSetupAds.cs b/src/MSCFixer/Features/Ads/FinishSetupAds.cs
index c3c6a4f..615c8f1 100644
--- a/src/MSCFixer/Features/Ads/FinishSetupAds.cs
+++ b/src/MSCFixer/Features/Ads/FinishSetupAds.cs
@@ -20,10 +20,10 @@ namespace Settings.Ads
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
return
- Utils.IntEquals(keyName, valueName, 0);
+ Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Ads/LockScreenAds.cs b/src/MSCFixer/Features/Ads/LockScreenAds.cs
index bd90296..9d5e63e 100644
--- a/src/MSCFixer/Features/Ads/LockScreenAds.cs
+++ b/src/MSCFixer/Features/Ads/LockScreenAds.cs
@@ -21,9 +21,9 @@ namespace Settings.Ads
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (Utils.IntEquals(keyName, valueName, recommendedValue) &&
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue) &&
Utils.IntEquals(keyName, valueName2, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/Ads/PersonalizedAds.cs b/src/MSCFixer/Features/Ads/PersonalizedAds.cs
index b8e503b..102b3e9 100644
--- a/src/MSCFixer/Features/Ads/PersonalizedAds.cs
+++ b/src/MSCFixer/Features/Ads/PersonalizedAds.cs
@@ -20,9 +20,9 @@ namespace Settings.Ads
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, 0);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Ads/SettingsAds.cs b/src/MSCFixer/Features/Ads/SettingsAds.cs
index 507900b..6f24e95 100644
--- a/src/MSCFixer/Features/Ads/SettingsAds.cs
+++ b/src/MSCFixer/Features/Ads/SettingsAds.cs
@@ -23,9 +23,9 @@ namespace Settings.Ads
return $"{keyName} | Value: {valueName} + {valueName2} + {valueName3} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (Utils.IntEquals(keyName, valueName, recommendedValue) &&
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue) &&
Utils.IntEquals(keyName, valueName2, recommendedValue) &&
Utils.IntEquals(keyName, valueName3, recommendedValue)
);
diff --git a/src/MSCFixer/Features/Ads/StartmenuAds.cs b/src/MSCFixer/Features/Ads/StartmenuAds.cs
index a3a2d37..e2a8da6 100644
--- a/src/MSCFixer/Features/Ads/StartmenuAds.cs
+++ b/src/MSCFixer/Features/Ads/StartmenuAds.cs
@@ -26,9 +26,9 @@ namespace Settings.Ads
return "This feature will disable ads in the start menu.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/Ads/TailoredExperiences.cs b/src/MSCFixer/Features/Ads/TailoredExperiences.cs
index 9c9935c..f0d6d95 100644
--- a/src/MSCFixer/Features/Ads/TailoredExperiences.cs
+++ b/src/MSCFixer/Features/Ads/TailoredExperiences.cs
@@ -26,9 +26,9 @@ namespace Settings.Ads
return "Tailored Experiences allows Microsoft to get information from you to deliver personalized tips, ads, and recommendations. Many people would call this telemetry, or even spying.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/Ads/TipsAndSuggestions.cs b/src/MSCFixer/Features/Ads/TipsAndSuggestions.cs
index e480a9e..ba6e44c 100644
--- a/src/MSCFixer/Features/Ads/TipsAndSuggestions.cs
+++ b/src/MSCFixer/Features/Ads/TipsAndSuggestions.cs
@@ -20,9 +20,9 @@ namespace Settings.Ads
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (Utils.IntEquals(keyName, valueName, recommendedValue)
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/Ads/WelcomeExperienceAds.cs b/src/MSCFixer/Features/Ads/WelcomeExperienceAds.cs
index 4f655cd..6219414 100644
--- a/src/MSCFixer/Features/Ads/WelcomeExperienceAds.cs
+++ b/src/MSCFixer/Features/Ads/WelcomeExperienceAds.cs
@@ -20,9 +20,9 @@ namespace Settings.Ads
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, 0);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/BrowserSignin.cs b/src/MSCFixer/Features/Edge/BrowserSignin.cs
index 98109ed..5235e0f 100644
--- a/src/MSCFixer/Features/Edge/BrowserSignin.cs
+++ b/src/MSCFixer/Features/Edge/BrowserSignin.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "This setting controls whether a user can sign into Microsoft Edge with an account to use services such as sync and single sign on";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/DefaultTopSites.cs b/src/MSCFixer/Features/Edge/DefaultTopSites.cs
index dfbabd8..79b0c47 100644
--- a/src/MSCFixer/Features/Edge/DefaultTopSites.cs
+++ b/src/MSCFixer/Features/Edge/DefaultTopSites.cs
@@ -9,7 +9,7 @@ namespace Settings.Edge
{
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
private const string valueName = "NewTabPageHideDefaultTopSites";
- private const int recommendedValue = 0;
+ private const int recommendedValue = 1;
public override string GetFeatureDetails()
{
@@ -20,16 +20,16 @@ namespace Settings.Edge
public override string Info() => "Hide default top sites from the new tab page in Microsoft Edge";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
{
try
{
- Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
+ Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
return Task.FromResult(true);
}
@@ -45,7 +45,7 @@ namespace Settings.Edge
{
try
{
- Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
+ Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
return true;
}
diff --git a/src/MSCFixer/Features/Edge/DefautBrowserSetting.cs b/src/MSCFixer/Features/Edge/DefautBrowserSetting.cs
index bf91eed..10b3ba9 100644
--- a/src/MSCFixer/Features/Edge/DefautBrowserSetting.cs
+++ b/src/MSCFixer/Features/Edge/DefautBrowserSetting.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Force Edge to stop asking to change default browser";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/EdgeCollections.cs b/src/MSCFixer/Features/Edge/EdgeCollections.cs
index 503a6e8..f8e0684 100644
--- a/src/MSCFixer/Features/Edge/EdgeCollections.cs
+++ b/src/MSCFixer/Features/Edge/EdgeCollections.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/EdgeShoppingAssistant.cs b/src/MSCFixer/Features/Edge/EdgeShoppingAssistant.cs
index f3d1c38..270936e 100644
--- a/src/MSCFixer/Features/Edge/EdgeShoppingAssistant.cs
+++ b/src/MSCFixer/Features/Edge/EdgeShoppingAssistant.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Shopping in Microsoft Edge feature will automatically find you the best prices and coupons from across the web as you shop";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/FirstRunExperience.cs b/src/MSCFixer/Features/Edge/FirstRunExperience.cs
index 3513620..fe879a2 100644
--- a/src/MSCFixer/Features/Edge/FirstRunExperience.cs
+++ b/src/MSCFixer/Features/Edge/FirstRunExperience.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Hide home screen and 'Getting Started' on initial launch (from version 80 onwards)";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/GamerMode.cs b/src/MSCFixer/Features/Edge/GamerMode.cs
index 1675643..516f2f2 100644
--- a/src/MSCFixer/Features/Edge/GamerMode.cs
+++ b/src/MSCFixer/Features/Edge/GamerMode.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Microsoft Edge Gamer Mode allows gamers to personalize their browser with gaming themes and gives them the option of enabling Efficiency Mode for PC gaming, the Gaming feed on new tabs, sidebar apps for gamers, and more";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/HubsSidebar.cs b/src/MSCFixer/Features/Edge/HubsSidebar.cs
index a03e495..a2c8aca 100644
--- a/src/MSCFixer/Features/Edge/HubsSidebar.cs
+++ b/src/MSCFixer/Features/Edge/HubsSidebar.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "This feature will disable Copilot in Microsoft Edge.";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, 0);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/ImportOnEachLaunch.cs b/src/MSCFixer/Features/Edge/ImportOnEachLaunch.cs
index 88cd85d..51a01b6 100644
--- a/src/MSCFixer/Features/Edge/ImportOnEachLaunch.cs
+++ b/src/MSCFixer/Features/Edge/ImportOnEachLaunch.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Allow import of data from other browsers on each Microsoft Edge launch";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/StartupBoost.cs b/src/MSCFixer/Features/Edge/StartupBoost.cs
index 4c7ba79..94da358 100644
--- a/src/MSCFixer/Features/Edge/StartupBoost.cs
+++ b/src/MSCFixer/Features/Edge/StartupBoost.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Enables Microsoft Edge processes to initialize at operating system startup and restart in the background after the last browser window has been closed";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/TabPageQuickLinks.cs b/src/MSCFixer/Features/Edge/TabPageQuickLinks.cs
index e64685e..c106f28 100644
--- a/src/MSCFixer/Features/Edge/TabPageQuickLinks.cs
+++ b/src/MSCFixer/Features/Edge/TabPageQuickLinks.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "By default, when you open a new tab, you see a Bing search bar, Bing image of the day set as the page background. For supported websites, Quick Links on the New Tab page can display recent updates right in the tile";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Edge/UserFeedback.cs b/src/MSCFixer/Features/Edge/UserFeedback.cs
index b72d128..75789a1 100644
--- a/src/MSCFixer/Features/Edge/UserFeedback.cs
+++ b/src/MSCFixer/Features/Edge/UserFeedback.cs
@@ -20,9 +20,9 @@ namespace Settings.Edge
public override string Info() => "Allow the submission of feedback, suggestions, or customer surveys, as well as reporting issues with the browser";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Gaming/GameDVR.cs b/src/MSCFixer/Features/Gaming/GameDVR.cs
index 0d6d698..2c1b479 100644
--- a/src/MSCFixer/Features/Gaming/GameDVR.cs
+++ b/src/MSCFixer/Features/Gaming/GameDVR.cs
@@ -31,11 +31,11 @@ namespace Settings.Gaming
return "This feature will disable Game DVR.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, 0) &&
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, 0) &&
Utils.IntEquals(keyName, valueName2, 2) &&
- Utils.IntEquals(keyName2, valueName3, 0);
+ Utils.IntEquals(keyName2, valueName3, 0));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Gaming/PowerThrotteling.cs b/src/MSCFixer/Features/Gaming/PowerThrotteling.cs
index 3d1f5c6..1cd7aab 100644
--- a/src/MSCFixer/Features/Gaming/PowerThrotteling.cs
+++ b/src/MSCFixer/Features/Gaming/PowerThrotteling.cs
@@ -26,9 +26,9 @@ namespace Settings.Gaming
return "This feature will disable Power Throttling.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Gaming/VisualFX.cs b/src/MSCFixer/Features/Gaming/VisualFX.cs
index 22d4b0f..a7e4ced 100644
--- a/src/MSCFixer/Features/Gaming/VisualFX.cs
+++ b/src/MSCFixer/Features/Gaming/VisualFX.cs
@@ -26,9 +26,9 @@ namespace Settings.Gaming
return "This feature will disable visual effects in Windows.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, 0);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Issues/BasicCleanup.cs b/src/MSCFixer/Features/Issues/BasicCleanup.cs
index f4337ef..5edad37 100644
--- a/src/MSCFixer/Features/Issues/BasicCleanup.cs
+++ b/src/MSCFixer/Features/Issues/BasicCleanup.cs
@@ -16,7 +16,7 @@ namespace Settings.Issues
public override string Info() => "Deletes all temporary files from the user's Temp folder. Then, the built-in Disk Cleanup utility (cleanmgr) is run.";
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
try
{
@@ -25,12 +25,12 @@ namespace Settings.Issues
bool isOk = totalSize <= 50;
- return isOk;
+ return Task.FromResult(isOk);
}
catch (Exception ex)
{
Logger.Log($"Error checking Temp folder: {ex.Message}", LogLevel.Error);
- return false;
+ return Task.FromResult(false);
}
}
diff --git a/src/MSCFixer/Features/Issues/WingetUpgrade.cs b/src/MSCFixer/Features/Issues/WingetUpgrade.cs
new file mode 100644
index 0000000..8da64db
--- /dev/null
+++ b/src/MSCFixer/Features/Issues/WingetUpgrade.cs
@@ -0,0 +1,125 @@
+using System;
+using System.Diagnostics;
+using System.Threading.Tasks;
+using Crapfixer;
+
+namespace Settings.System
+{
+ internal class WingetUpgradeAll : FeatureBase
+ {
+ public override string GetFeatureDetails()
+ {
+ return "Launches Windows Terminal to check and upgrade all installed apps via winget.";
+ }
+
+ public override string ID()
+ {
+ return "Winget App Updates";
+ }
+
+ public override string Info()
+ {
+ return "Automatically searches for available app updates using the Windows package manager 'winget' and installs them in a new Windows Terminal window. It runs 'winget upgrade --include-unknown' to list all available updates, including manually installed apps, and then 'winget upgrade --all --include-unknown' to install them. No manual interaction is required.";
+ }
+
+ public override async Task CheckFeature()
+ {
+ Logger.Log("📦 Checking all available updates via winget...", LogLevel.Warning);
+ Logger.Log("This may take a while, please be patient.", LogLevel.Warning);
+
+ try
+ {
+ string output = await ExecuteCommand("winget upgrade --include-unknown");
+
+ Logger.Log("Winget upgrade check:\n" + output, LogLevel.Info);
+
+ return output.ToLower().Contains("available");
+ }
+ catch (Exception ex)
+ {
+ Logger.Log("Winget check failed: " + ex.Message, LogLevel.Error);
+ return false;
+ }
+ }
+
+ public override Task DoFeature()
+ {
+ return Task.Factory.StartNew(() =>
+ {
+ try
+ {
+ LaunchInTerminal("winget upgrade --all --include-unknown");
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Logger.Log("Failed to run winget upgrade: " + ex.Message, LogLevel.Error);
+ return false;
+ }
+ });
+ }
+
+ public override bool UndoFeature()
+ {
+ Logger.Log("Winget upgrades cannot be undone.", LogLevel.Warning);
+ return false;
+ }
+
+ private void LaunchInTerminal(string command)
+ {
+ var startInfo = new ProcessStartInfo
+ {
+ FileName = "wt.exe",
+ Arguments = "-w 0 nt -p \"Windows PowerShell\" powershell -NoExit -Command \"" + command + "\"",
+ UseShellExecute = true
+ };
+
+ Process.Start(startInfo);
+ }
+
+ private Task ExecuteCommand(string command)
+ {
+ var tcs = new TaskCompletionSource();
+
+ try
+ {
+ var startInfo = new ProcessStartInfo
+ {
+ FileName = "cmd.exe",
+ Arguments = "/c " + command,
+ UseShellExecute = false,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ CreateNoWindow = true
+ };
+
+ var process = new Process();
+ process.StartInfo = startInfo;
+
+ string output = "";
+
+ process.OutputDataReceived += (sender, args) =>
+ {
+ if (args.Data != null)
+ output += args.Data + Environment.NewLine;
+ };
+
+ process.EnableRaisingEvents = true;
+ process.Exited += (sender, args) =>
+ {
+ tcs.TrySetResult(output);
+ process.Dispose();
+ };
+
+ process.Start();
+ process.BeginOutputReadLine();
+ }
+ catch (Exception ex)
+ {
+ tcs.TrySetException(ex);
+ }
+
+ return tcs.Task;
+ }
+ }
+}
diff --git a/src/MSCFixer/Features/Privacy/ActivityHistory.cs b/src/MSCFixer/Features/Privacy/ActivityHistory.cs
index 99910db..29b2810 100644
--- a/src/MSCFixer/Features/Privacy/ActivityHistory.cs
+++ b/src/MSCFixer/Features/Privacy/ActivityHistory.cs
@@ -26,9 +26,9 @@ namespace Settings.Privacy
return "Disable activity history (prevents Windows from tracking and storing your activity)";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/Privacy/LocationTracking.cs b/src/MSCFixer/Features/Privacy/LocationTracking.cs
index 7dec042..55f793a 100644
--- a/src/MSCFixer/Features/Privacy/LocationTracking.cs
+++ b/src/MSCFixer/Features/Privacy/LocationTracking.cs
@@ -26,9 +26,9 @@ namespace Settings.Privacy
return "Disable location tracking (prevents Windows from accessing your location)";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/Privacy/PrivacyExperience.cs b/src/MSCFixer/Features/Privacy/PrivacyExperience.cs
index f2a4cd4..ae11f95 100644
--- a/src/MSCFixer/Features/Privacy/PrivacyExperience.cs
+++ b/src/MSCFixer/Features/Privacy/PrivacyExperience.cs
@@ -20,11 +20,13 @@ namespace Settings.Privacy
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return !Utils.IntEquals(keyName, valueName, recommendedValue);
+ bool result = !Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(result);
}
+
public override Task DoFeature()
{
try
diff --git a/src/MSCFixer/Features/Privacy/Telemetry.cs b/src/MSCFixer/Features/Privacy/Telemetry.cs
index e37d4bd..3698d57 100644
--- a/src/MSCFixer/Features/Privacy/Telemetry.cs
+++ b/src/MSCFixer/Features/Privacy/Telemetry.cs
@@ -19,11 +19,11 @@ namespace Settings.Privacy
return $"{dataCollection} | {diagTrack}";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(dataCollection, "AllowTelemetry", 0) &&
- Utils.IntEquals(diagTrack, "Start", 2)
+ Utils.IntEquals(diagTrack, "Start", 4)
);
}
diff --git a/src/MSCFixer/Features/System/BSODDetails.cs b/src/MSCFixer/Features/System/BSODDetails.cs
index c387e8e..2da5227 100644
--- a/src/MSCFixer/Features/System/BSODDetails.cs
+++ b/src/MSCFixer/Features/System/BSODDetails.cs
@@ -27,9 +27,9 @@ namespace Settings.System
return "This method displays the full classic BSOD with technical error details instead of the simplified sad face version.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName1, recommendedValue) &&
Utils.IntEquals(keyName, valueName2, recommendedValue)
);
diff --git a/src/MSCFixer/Features/System/MenuShowDelay.cs b/src/MSCFixer/Features/System/MenuShowDelay.cs
index d34f4bb..52c2dc8 100644
--- a/src/MSCFixer/Features/System/MenuShowDelay.cs
+++ b/src/MSCFixer/Features/System/MenuShowDelay.cs
@@ -26,9 +26,9 @@ namespace Settings.System
return "Speeds up the appearance of menus and submenus by lowering the default delay. This improves the perceived responsiveness of the UI.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.StringEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.StringEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/System/NetworkThrottling.cs b/src/MSCFixer/Features/System/NetworkThrottling.cs
index 47e294d..eac879a 100644
--- a/src/MSCFixer/Features/System/NetworkThrottling.cs
+++ b/src/MSCFixer/Features/System/NetworkThrottling.cs
@@ -26,9 +26,9 @@ namespace Settings.System
return "Disables the Windows network throttling mechanism to potentially improve performance for streaming, gaming, or real-time applications.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, unchecked((int)0xFFFFFFFF));
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, unchecked((int)0xFFFFFFFF)));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/System/SpeedUpShutdown.cs b/src/MSCFixer/Features/System/SpeedUpShutdown.cs
index 93ef822..a87801a 100644
--- a/src/MSCFixer/Features/System/SpeedUpShutdown.cs
+++ b/src/MSCFixer/Features/System/SpeedUpShutdown.cs
@@ -26,9 +26,9 @@ namespace Settings.System
return "This feature reduces the WaitToKillServiceTimeout value, which speeds up the shutdown process by reducing the time Windows waits for services to stop.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.StringEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/System/SystemResponsiveness.cs b/src/MSCFixer/Features/System/SystemResponsiveness.cs
index 93536e9..62e6d84 100644
--- a/src/MSCFixer/Features/System/SystemResponsiveness.cs
+++ b/src/MSCFixer/Features/System/SystemResponsiveness.cs
@@ -26,9 +26,9 @@ namespace Settings.System
return "Enhances system responsiveness by prioritizing CPU resources for foreground tasks, improving performance during active use.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/System/VerboseStatus.cs b/src/MSCFixer/Features/System/VerboseStatus.cs
index 9ddf566..51de9a5 100644
--- a/src/MSCFixer/Features/System/VerboseStatus.cs
+++ b/src/MSCFixer/Features/System/VerboseStatus.cs
@@ -26,9 +26,9 @@ namespace Settings.System
return "This method allows you to see what processes are hanging when shutting down and turning on the machine.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/DarkMode.cs b/src/MSCFixer/Features/UI/DarkMode.cs
index cbd3782..f0b02ef 100644
--- a/src/MSCFixer/Features/UI/DarkMode.cs
+++ b/src/MSCFixer/Features/UI/DarkMode.cs
@@ -26,9 +26,9 @@ namespace Settings.Personalization
return "This feature enables Dark Mode for apps in Windows 11.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
@@ -85,9 +85,9 @@ namespace Settings.Personalization
return "This feature enables Dark Mode for Windows system UI (e.g., taskbar, start menu).";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/FullContextMenus.cs b/src/MSCFixer/Features/UI/FullContextMenus.cs
index 717697d..a427137 100644
--- a/src/MSCFixer/Features/UI/FullContextMenus.cs
+++ b/src/MSCFixer/Features/UI/FullContextMenus.cs
@@ -24,17 +24,17 @@ namespace Settings.Personalization
return "This feature will enable full context menus";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
try
{
object value = Registry.GetValue(keyName, "", null);
- return value != null; // Return true if value is not null
+ return Task.FromResult(value != null); // Return true if value is not null
}
catch (Exception ex)
{
Logger.Log("Error occurred while checking: " + ex.Message, LogLevel.Error);
- return false;
+ return Task.FromResult(false);
}
}
diff --git a/src/MSCFixer/Features/UI/LockScreen.cs b/src/MSCFixer/Features/UI/LockScreen.cs
index 098da5a..dfcb7fa 100644
--- a/src/MSCFixer/Features/UI/LockScreen.cs
+++ b/src/MSCFixer/Features/UI/LockScreen.cs
@@ -26,13 +26,13 @@ namespace Settings.Personalization
return "This feature will disable the personalized lock screen.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return !(
- Utils.IntEquals(keyName, valueName, recommendedValue)
- );
+ bool result = !Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(result);
}
+
public override Task DoFeature()
{
try
diff --git a/src/MSCFixer/Features/UI/SearchBoxSuggestions.cs b/src/MSCFixer/Features/UI/SearchBoxSuggestions.cs
index 8ba9ce1..e1efa7c 100644
--- a/src/MSCFixer/Features/UI/SearchBoxSuggestions.cs
+++ b/src/MSCFixer/Features/UI/SearchBoxSuggestions.cs
@@ -26,9 +26,9 @@ namespace Settings.UI
return "This feature disables Bing search and web suggestions in the Windows Start Menu.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return Utils.IntEquals(keyName, valueName, recommendedValue);
+ return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
}
public override Task DoFeature()
diff --git a/src/MSCFixer/Features/UI/SearchboxTaskbarMode.cs b/src/MSCFixer/Features/UI/SearchboxTaskbarMode.cs
index e094195..caf798e 100644
--- a/src/MSCFixer/Features/UI/SearchboxTaskbarMode.cs
+++ b/src/MSCFixer/Features/UI/SearchboxTaskbarMode.cs
@@ -26,9 +26,9 @@ namespace Settings.Personalization
return "This feature will hide search box on taskbar";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/ShowOrHideMostUsedApps.cs b/src/MSCFixer/Features/UI/ShowOrHideMostUsedApps.cs
index 350b448..b1d44e1 100644
--- a/src/MSCFixer/Features/UI/ShowOrHideMostUsedApps.cs
+++ b/src/MSCFixer/Features/UI/ShowOrHideMostUsedApps.cs
@@ -9,7 +9,7 @@ namespace Settings.Personalization
{
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer";
private const string valueName = "ShowOrHideMostUsedApps";
- private const int recommendedValue = 0;
+ private const int recommendedValue = 2;
public override string GetFeatureDetails()
{
@@ -23,12 +23,12 @@ namespace Settings.Personalization
public override string Info()
{
- return "This feature will hide Most used apps in start menu";
+ return "This feature will hide Most used apps in start menu for all users";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
@@ -37,7 +37,7 @@ namespace Settings.Personalization
{
try
{
- Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
+ Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
return Task.FromResult(true);
}
catch (Exception ex)
@@ -52,7 +52,7 @@ namespace Settings.Personalization
{
try
{
- Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord);
+ Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
return true;
}
catch (Exception ex)
diff --git a/src/MSCFixer/Features/UI/ShowTaskViewButton.cs b/src/MSCFixer/Features/UI/ShowTaskViewButton.cs
index dffd9c7..60c953b 100644
--- a/src/MSCFixer/Features/UI/ShowTaskViewButton.cs
+++ b/src/MSCFixer/Features/UI/ShowTaskViewButton.cs
@@ -26,9 +26,9 @@ namespace Settings.Personalization
return "This feature will hide the Task view button on taskbar";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/SnapAssistFlyout.cs b/src/MSCFixer/Features/UI/SnapAssistFlyout.cs
index 10a03b9..718c942 100644
--- a/src/MSCFixer/Features/UI/SnapAssistFlyout.cs
+++ b/src/MSCFixer/Features/UI/SnapAssistFlyout.cs
@@ -26,9 +26,9 @@ namespace Settings.Personalization
return "This feature disables the Snap Assist flyout, which appears when you snap a window.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/StartLayout.cs b/src/MSCFixer/Features/UI/StartLayout.cs
index c2012d1..431ad41 100644
--- a/src/MSCFixer/Features/UI/StartLayout.cs
+++ b/src/MSCFixer/Features/UI/StartLayout.cs
@@ -26,9 +26,9 @@ namespace Settings.Personalization
return "This feature will allow pinning more Apps on start menu";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/TaskbarAlignment.cs b/src/MSCFixer/Features/UI/TaskbarAlignment.cs
index f5f0070..f1f8275 100644
--- a/src/MSCFixer/Features/UI/TaskbarAlignment.cs
+++ b/src/MSCFixer/Features/UI/TaskbarAlignment.cs
@@ -27,9 +27,9 @@ namespace Settings.Personalization
return "This feature will align the Start button to left";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Features/UI/Transparency.cs b/src/MSCFixer/Features/UI/Transparency.cs
index e7d6ead..ce0ce4b 100644
--- a/src/MSCFixer/Features/UI/Transparency.cs
+++ b/src/MSCFixer/Features/UI/Transparency.cs
@@ -27,9 +27,9 @@ namespace Settings.Personalization
return "This feature disables transparency effects for Start menu, taskbar, and other surfaces.";
}
- public override bool CheckFeature()
+ public override Task CheckFeature()
{
- return (
+ return Task.FromResult(
Utils.IntEquals(keyName, valueName, recommendedValue)
);
}
diff --git a/src/MSCFixer/Helpers/HelperTool.cs b/src/MSCFixer/Helpers/HelperTool.cs
deleted file mode 100644
index 318da56..0000000
--- a/src/MSCFixer/Helpers/HelperTool.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System.IO;
-using System.Windows.Forms;
-
-namespace HelperTool
-{
- internal class Utils
-
- {
- public static class Data
- {
- public static string DataRootDir = Application.StartupPath +
- @"\app\";
- }
-
- // Create data directory if non present
- public static void CreateDataDir()
- {
- bool dirExists = Directory.Exists(@"app");
- if (!dirExists)
- Directory.CreateDirectory(@"app");
- }
- }
-}
\ No newline at end of file
diff --git a/src/MSCFixer/Program.cs b/src/MSCFixer/Program.cs
new file mode 100644
index 0000000..745bf14
--- /dev/null
+++ b/src/MSCFixer/Program.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Crapfixer
+{
+ internal static class Program
+ {
+ ///
+ /// Get app version
+ ///
+ internal static string GetCurrentVersionTostring() => new Version(Application.ProductVersion).ToString(3);
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainForm());
+ }
+ }
+}
diff --git a/src/MSCFixer/Properties/AssemblyInfo.cs b/src/MSCFixer/Properties/AssemblyInfo.cs
index 8efe461..1e5d46b 100644
--- a/src/MSCFixer/Properties/AssemblyInfo.cs
+++ b/src/MSCFixer/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.31.101")]
-[assembly: AssemblyFileVersion("0.31.101")]
+[assembly: AssemblyVersion("0.40.124")]
+[assembly: AssemblyFileVersion("0.40.124")]
diff --git a/src/MSCFixer/app.manifest b/src/MSCFixer/app.manifest
new file mode 100644
index 0000000..f8a144b
--- /dev/null
+++ b/src/MSCFixer/app.manifest
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+
+
+
+