diff --git a/Checkup.csproj b/Checkup.csproj
index ef84922..52f92f3 100644
--- a/Checkup.csproj
+++ b/Checkup.csproj
@@ -1 +1 @@
-WinExenet10.0-windowstruetrueenableenable1.1.0falsefalsefalseCheckupCheckupinforment
+WinExenet10.0-windowstruetrueenableenable1.1.1falsefalsefalseCheckupCheckupinforment
diff --git a/MainWindow.xaml b/MainWindow.xaml
index fba3bf0..b9eaa8e 100644
--- a/MainWindow.xaml
+++ b/MainWindow.xaml
@@ -1 +1 @@
-
+
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 89f005b..4ea1596 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -6,18 +6,18 @@ public partial class MainWindow : Window
private IReadOnlyList findings = Array.Empty();
public MainWindow() { InitializeComponent(); if (ScanButton.Parent is System.Windows.Controls.StackPanel oldActions && oldActions.Parent is System.Windows.Controls.Grid grid) { var actions = new System.Windows.Controls.WrapPanel { HorizontalAlignment = System.Windows.HorizontalAlignment.Right, VerticalAlignment = VerticalAlignment.Center, MaxWidth = 410 }; while (oldActions.Children.Count > 0) { var child = oldActions.Children[0]; oldActions.Children.RemoveAt(0); actions.Children.Add(child); } var index = grid.Children.IndexOf(oldActions); grid.Children.RemoveAt(index); grid.Children.Insert(index, actions); AddActionButton(actions, "Enter product key", (_, _) => OpenActivationTool("3")); AddSettingsButton(actions, "Activation settings", "ms-settings:activation"); AddActionButton(actions, "Phone activation", (_, _) => OpenActivationTool("4")); AddSettingsButton(actions, "Storage settings", "ms-settings:storagesense"); AddSettingsButton(actions, "Windows Update", "ms-settings:windowsupdate"); AddSettingsButton(actions, "Network settings", "ms-settings:network-status"); } Opacity = 0; Loaded += (_, _) => BeginAnimation(OpacityProperty, new System.Windows.Media.Animation.DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(260))); }
private void AddActionButton(System.Windows.Controls.Panel panel, string label, RoutedEventHandler handler) { var button = new System.Windows.Controls.Button { Content = label, ToolTip = "Open the official Windows activation workflow", Padding = new Thickness(10, 8, 10, 8) }; button.Click += handler; panel.Children.Add(button); }
- private void OpenActivationTool(string mode) { try { System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("slui.exe", mode) { UseShellExecute = true }); EvidenceText.Text = mode == "3" ? "Windows product-key activation opened. Enter a valid key to activate this installation." : "Windows phone activation opened. Follow Microsoft’s official instructions."; } catch { OpenSettings("ms-settings:activation"); } }
+ private void OpenActivationTool(string mode) { try { System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("slui.exe", mode) { UseShellExecute = true }); EvidenceText.Text = mode == "3" ? "Windows product-key activation opened. Enter a valid key to activate this installation." : "Windows phone activation opened. Follow Microsoft’s official instructions."; } catch { OpenSettings("ms-settings:activation"); } }
private void AddSettingsButton(System.Windows.Controls.Panel panel, string label, string uri) { var button = new System.Windows.Controls.Button { Content = label, ToolTip = "Open the official Windows settings page", Padding = new Thickness(10, 8, 10, 8) }; button.Click += (_, _) => OpenSettings(uri); panel.Children.Add(button); }
private void OpenSettings(string uri) { try { System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(uri) { UseShellExecute = true }); } catch (Exception ex) { EvidenceText.Text = $"Could not open Windows settings: {ex.Message}"; } }
- private async void Scan_Click(object sender, RoutedEventArgs e) { ScanButton.IsEnabled = false; SummaryText.Text = "Inspecting system…"; EvidenceText.Text = "Reading evidence without changing settings."; try { findings = await Task.Run(CheckupEngine.Scan); FindingsList.ItemsSource = findings.Select(f => $"{(f.Level == FindingLevel.Good ? "✓" : "!")} {f.Title}\n {f.Explanation}\n Evidence: {f.Evidence}").ToArray(); var attention = findings.Count(f => f.Level != FindingLevel.Good); SummaryText.Text = attention == 0 ? "Your system looks healthy" : $"{attention} item(s) need review"; CountText.Text = $"{findings.Count} checks · {attention} requiring attention"; EvidenceText.Text = "Scan complete · no changes were applied."; ReportButton.IsEnabled = true; } catch (Exception ex) { SummaryText.Text = "Scan could not complete"; EvidenceText.Text = ex.Message; } finally { ScanButton.IsEnabled = true; } }
- private void Report_Click(object sender, RoutedEventArgs e) { if (findings.Count == 0) return; using var dialog = new System.Windows.Forms.SaveFileDialog { Filter = "Checkup support bundle (*.zip)|*.zip", FileName = $"openfix-support-{DateTime.Now:yyyyMMdd-HHmm}.zip" }; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { var result = SupportBundle.Export(dialog.FileName, findings); EvidenceText.Text = $"Support bundle saved · {result.SizeBytes / 1024d:0.0} KB · SHA-256 {result.Sha256[..12]}…"; } catch (Exception ex) { EvidenceText.Text = $"Could not export support bundle: {ex.Message}"; } } }
+ private async void Scan_Click(object sender, RoutedEventArgs e) { ScanButton.IsEnabled = false; SummaryText.Text = "Inspecting system…"; EvidenceText.Text = "Reading evidence without changing settings."; try { findings = await Task.Run(CheckupEngine.Scan); FindingsList.ItemsSource = findings.Select(f => $"{(f.Level == FindingLevel.Good ? "✓" : "!")} {f.Title}\n {f.Explanation}\n Evidence: {f.Evidence}").ToArray(); var attention = findings.Count(f => f.Level != FindingLevel.Good); SummaryText.Text = attention == 0 ? "Your system looks healthy" : $"{attention} item(s) need review"; CountText.Text = $"{findings.Count} checks · {attention} requiring attention"; EvidenceText.Text = "Scan complete · no changes were applied."; ReportButton.IsEnabled = true; } catch (Exception ex) { SummaryText.Text = "Scan could not complete"; EvidenceText.Text = ex.Message; } finally { ScanButton.IsEnabled = true; } }
+ private void Report_Click(object sender, RoutedEventArgs e) { if (findings.Count == 0) return; using var dialog = new System.Windows.Forms.SaveFileDialog { Filter = "Checkup support bundle (*.zip)|*.zip", FileName = $"openfix-support-{DateTime.Now:yyyyMMdd-HHmm}.zip" }; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { var result = SupportBundle.Export(dialog.FileName, findings); EvidenceText.Text = $"Support bundle saved · {result.SizeBytes / 1024d:0.0} KB · SHA-256 {result.Sha256[..12]}…"; } catch (Exception ex) { EvidenceText.Text = $"Could not export support bundle: {ex.Message}"; } } }
protected override void OnContentRendered(EventArgs e) { base.OnContentRendered(e); UpdateVersionLabel(this); }
private static void UpdateVersionLabel(System.Windows.DependencyObject parent)
{
for (var i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = System.Windows.Media.VisualTreeHelper.GetChild(parent, i);
- if (child is System.Windows.Controls.TextBlock text && text.Text.StartsWith("Checkup 0.1.0", StringComparison.Ordinal)) text.Text = "Checkup 1.1.0 · MIT licensed · Not affiliated with Microsoft or Windows";
+ if (child is System.Windows.Controls.TextBlock text && text.Text.StartsWith("Checkup 0.1.0", StringComparison.Ordinal)) text.Text = "Checkup 1.1.1 · MIT licensed · Not affiliated with Microsoft or Windows";
UpdateVersionLabel(child);
}
}
diff --git a/README.md b/README.md
index 9f75959..65860d4 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
Checkup is a read-only-first Windows health and troubleshooting tool.
-It scans for useful evidence: system-drive space, temporary-file growth, network availability, startup inventory, activation status, and scan safety. It then explains what it found in plain language and calculates a transparent 0–100 health score.
+It scans for useful evidence: system-drive space, temporary-file growth, network availability, startup inventory, activation status, and scan safety. It then explains what it found in plain language and calculates a transparent 0–100 health score.
## Support bundles
@@ -38,12 +38,12 @@ Checkup replaces OpenFix. New builds use Checkup.exe and Checkup.csproj. Existin
Windows setup packages install Checkup for your current account, bundle the .NET runtime, create a Start menu shortcut and register an uninstaller. A desktop shortcut is optional. No administrator password or manual file copying is required. Existing settings and saved data stay in their current locations. The portable ZIP remains available.
-Installer builds are being validated in the **Automatic setup** workflow. Once published, download `Checkup-vVERSION-setup.exe` from Releases and run it.
+Download `Checkup-v1.1.1-setup.exe` from Releases and run it.
For unattended deployment:
```powershell
-Start-Process .\Checkup-vVERSION-setup.exe -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-' -Wait -PassThru
+Start-Process .\Checkup-v1.1.1-setup.exe -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-' -Wait -PassThru
```
Build from source with the [open-source Inno Setup compiler](https://github.com/jrsoftware/issrc) installed: