diff --git a/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs b/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs
index 7ac8530..504b5b4 100644
--- a/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs
+++ b/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs
@@ -216,22 +216,39 @@ namespace MarcusLaw.OutlookAddin.UI.ViewModels
// VSTO add-ins cannot be updated programmatically from inside
// a running Outlook — ApplicationDeployment.Update() throws.
- // Open the .vsto URL via the shell; Windows hands it to
- // VSTOInstaller.exe which installs the update correctly.
- try
+ // Don't shell-launch the .vsto URL either: Chrome / Edge will
+ // download it to disk, and the resulting file has a different
+ // security zone than the deployment manifest, which fails with
+ // InvalidDeploymentException ("no matching security zones").
+ // Call VSTOInstaller.exe directly so the URL is processed in
+ // the Internet zone, matching the manifest.
+ var installerPath = FindVstoInstaller();
+ if (installerPath != null)
{
- System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(manifestUri.ToString())
+ try
{
- UseShellExecute = true
- });
- UpdateStatusBrush = SuccessBrush;
- UpdateStatus = $"זמינה גרסה {availableVersion} — אשר את ההתקנה בחלון שנפתח, ואז סגור ופתח את Outlook.";
+ System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(
+ installerPath, "/I \"" + manifestUri + "\"")
+ {
+ UseShellExecute = false
+ });
+ UpdateStatusBrush = SuccessBrush;
+ UpdateStatus = $"זמינה גרסה {availableVersion} — אשר את ההתקנה בחלון שנפתח, ואז סגור ופתח את Outlook.";
+ }
+ catch (Exception launchEx)
+ {
+ _logger.Warning(launchEx, "CheckForUpdate: VSTOInstaller launch failed");
+ UpdateStatusBrush = ErrorBrush;
+ UpdateStatus = $"זמינה גרסה {availableVersion} — סגור ופתח את Outlook כדי להתקין אוטומטית.";
+ }
}
- catch (Exception launchEx)
+ else
{
- _logger.Warning(launchEx, "CheckForUpdate: shell launch of installer URL failed");
- UpdateStatusBrush = ErrorBrush;
- UpdateStatus = $"זמינה גרסה {availableVersion} אבל לא הצלחנו לפתוח את חלון ההתקנה. גש ידנית ל-{manifestUri}";
+ // VSTOInstaller not at the canonical path — VSTO runtime
+ // still picks up new manifests on Outlook startup, so
+ // ask the user to restart instead of attempting a hack.
+ UpdateStatusBrush = SuccessBrush;
+ UpdateStatus = $"זמינה גרסה {availableVersion} — סגור ופתח את Outlook כדי להתקין אוטומטית.";
}
return;
}
@@ -286,6 +303,50 @@ namespace MarcusLaw.OutlookAddin.UI.ViewModels
}
}
+ ///
+ /// Locates VSTOInstaller.exe on the machine. The path is stable
+ /// for VSTO 4.0 (Office 2010+) — falls back to a registry lookup
+ /// if the default install location was customised.
+ ///
+ private static string? FindVstoInstaller()
+ {
+ string[] candidates =
+ {
+ @"C:\Program Files (x86)\Common Files\Microsoft Shared\VSTO\10.0\VSTOInstaller.exe",
+ @"C:\Program Files\Common Files\Microsoft Shared\VSTO\10.0\VSTOInstaller.exe"
+ };
+ foreach (var p in candidates)
+ {
+ if (System.IO.File.Exists(p)) return p;
+ }
+
+ // Registry fallback: HKCR\VstoFile\shell\Open\command stores
+ // the verb VSTOInstaller registers for the .vsto extension.
+ try
+ {
+ using (var key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"VstoFile\shell\Open\command"))
+ {
+ var cmd = key?.GetValue(null) as string;
+ if (!string.IsNullOrEmpty(cmd))
+ {
+ // Value looks like: "C:\...\VSTOInstaller.exe" "%1"
+ var firstQuote = cmd!.IndexOf('"');
+ if (firstQuote == 0)
+ {
+ var endQuote = cmd.IndexOf('"', 1);
+ if (endQuote > 1)
+ {
+ var exe = cmd.Substring(1, endQuote - 1);
+ if (System.IO.File.Exists(exe)) return exe;
+ }
+ }
+ }
+ }
+ }
+ catch { /* registry access denied or schema differs — fall through */ }
+ return null;
+ }
+
private bool CanCheckForUpdate() => !IsCheckingForUpdate;
partial void OnIsCheckingForUpdateChanged(bool value)
diff --git a/src/OutlookAddin/OutlookAddin.csproj b/src/OutlookAddin/OutlookAddin.csproj
index a2d8e1d..2273dcf 100644
--- a/src/OutlookAddin/OutlookAddin.csproj
+++ b/src/OutlookAddin/OutlookAddin.csproj
@@ -36,7 +36,7 @@
C:\Users\Chaim\source\repos\OutlookAddin\Publish\
https://gitea.dev.marcus-law.co.il/espocrm-extensions/OutlookAddin/raw/branch/main/Publish/
en
- 1.2.4.0
+ 1.2.5.0
false
true
7
diff --git a/src/OutlookAddin/Properties/AssemblyInfo.cs b/src/OutlookAddin/Properties/AssemblyInfo.cs
index ab2636a..d3f7075 100644
--- a/src/OutlookAddin/Properties/AssemblyInfo.cs
+++ b/src/OutlookAddin/Properties/AssemblyInfo.cs
@@ -33,6 +33,6 @@ using System.Security;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.2.4.0")]
-[assembly: AssemblyFileVersion("1.2.4.0")]
+[assembly: AssemblyVersion("1.2.5.0")]
+[assembly: AssemblyFileVersion("1.2.5.0")]