diff --git a/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs b/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs
index 504b5b4..a0b8258 100644
--- a/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs
+++ b/src/OutlookAddin.UI/ViewModels/SettingsViewModel.cs
@@ -214,42 +214,25 @@ namespace MarcusLaw.OutlookAddin.UI.ViewModels
return;
}
- // VSTO add-ins cannot be updated programmatically from inside
- // a running Outlook — ApplicationDeployment.Update() throws.
- // 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)
- {
- try
- {
- 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 כדי להתקין אוטומטית.";
- }
- }
- else
- {
- // 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 כדי להתקין אוטומטית.";
- }
+ // A running Outlook holds file locks on the loaded add-in
+ // DLLs. Neither ApplicationDeployment.Update (TrustNotGranted)
+ // nor a direct VSTOInstaller.exe /I call (0x8007007E
+ // ERROR_MOD_NOT_FOUND) nor Process.Start(.vsto URL) (Chrome
+ // downloads to local-machine zone — InvalidDeploymentException)
+ // can install over those locks. The only path that actually
+ // works is the one VSTO runtime takes automatically on Outlook
+ // startup: it checks the manifest URL before loading the
+ // add-in, downloads + installs if there's a newer version,
+ // then loads it.
+ //
+ // So the button's job is just to tell the user: "close and
+ // reopen Outlook." That's the same flow the user has been
+ // doing manually all along; we're just confirming the new
+ // version is there waiting.
+ UpdateStatusBrush = SuccessBrush;
+ UpdateStatus =
+ $"זמינה גרסה {availableVersion}. סגור ופתח את Outlook — " +
+ "הגרסה החדשה תותקן אוטומטית בעלייה.";
return;
}
catch (System.Deployment.Application.DeploymentDownloadException ex)
@@ -303,50 +286,6 @@ 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 1c379fa..215b58c 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.6.0
+ 1.2.7.0
false
true
7
diff --git a/src/OutlookAddin/Properties/AssemblyInfo.cs b/src/OutlookAddin/Properties/AssemblyInfo.cs
index 106a786..23625a2 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.6.0")]
-[assembly: AssemblyFileVersion("1.2.6.0")]
+[assembly: AssemblyVersion("1.2.7.0")]
+[assembly: AssemblyFileVersion("1.2.7.0")]