Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 655fefa822 | |||
| d2c54840ba |
@@ -214,42 +214,25 @@ namespace MarcusLaw.OutlookAddin.UI.ViewModels
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// VSTO add-ins cannot be updated programmatically from inside
|
// A running Outlook holds file locks on the loaded add-in
|
||||||
// a running Outlook — ApplicationDeployment.Update() throws.
|
// DLLs. Neither ApplicationDeployment.Update (TrustNotGranted)
|
||||||
// Don't shell-launch the .vsto URL either: Chrome / Edge will
|
// nor a direct VSTOInstaller.exe /I call (0x8007007E
|
||||||
// download it to disk, and the resulting file has a different
|
// ERROR_MOD_NOT_FOUND) nor Process.Start(.vsto URL) (Chrome
|
||||||
// security zone than the deployment manifest, which fails with
|
// downloads to local-machine zone — InvalidDeploymentException)
|
||||||
// InvalidDeploymentException ("no matching security zones").
|
// can install over those locks. The only path that actually
|
||||||
// Call VSTOInstaller.exe directly so the URL is processed in
|
// works is the one VSTO runtime takes automatically on Outlook
|
||||||
// the Internet zone, matching the manifest.
|
// startup: it checks the manifest URL before loading the
|
||||||
var installerPath = FindVstoInstaller();
|
// add-in, downloads + installs if there's a newer version,
|
||||||
if (installerPath != null)
|
// then loads it.
|
||||||
{
|
//
|
||||||
try
|
// So the button's job is just to tell the user: "close and
|
||||||
{
|
// reopen Outlook." That's the same flow the user has been
|
||||||
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(
|
// doing manually all along; we're just confirming the new
|
||||||
installerPath, "/I \"" + manifestUri + "\"")
|
// version is there waiting.
|
||||||
{
|
UpdateStatusBrush = SuccessBrush;
|
||||||
UseShellExecute = false
|
UpdateStatus =
|
||||||
});
|
$"זמינה גרסה {availableVersion}. סגור ופתח את Outlook — " +
|
||||||
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 כדי להתקין אוטומטית.";
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
catch (System.Deployment.Application.DeploymentDownloadException ex)
|
catch (System.Deployment.Application.DeploymentDownloadException ex)
|
||||||
@@ -303,50 +286,6 @@ namespace MarcusLaw.OutlookAddin.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 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.
|
|
||||||
/// </summary>
|
|
||||||
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;
|
private bool CanCheckForUpdate() => !IsCheckingForUpdate;
|
||||||
|
|
||||||
partial void OnIsCheckingForUpdateChanged(bool value)
|
partial void OnIsCheckingForUpdateChanged(bool value)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
<PublishUrl>C:\Users\Chaim\source\repos\OutlookAddin\Publish\</PublishUrl>
|
<PublishUrl>C:\Users\Chaim\source\repos\OutlookAddin\Publish\</PublishUrl>
|
||||||
<InstallUrl>https://gitea.dev.marcus-law.co.il/espocrm-extensions/OutlookAddin/raw/branch/main/Publish/</InstallUrl>
|
<InstallUrl>https://gitea.dev.marcus-law.co.il/espocrm-extensions/OutlookAddin/raw/branch/main/Publish/</InstallUrl>
|
||||||
<TargetCulture>en</TargetCulture>
|
<TargetCulture>en</TargetCulture>
|
||||||
<ApplicationVersion>1.2.5.0</ApplicationVersion>
|
<ApplicationVersion>1.2.7.0</ApplicationVersion>
|
||||||
<AutoIncrementApplicationRevision>false</AutoIncrementApplicationRevision>
|
<AutoIncrementApplicationRevision>false</AutoIncrementApplicationRevision>
|
||||||
<UpdateEnabled>true</UpdateEnabled>
|
<UpdateEnabled>true</UpdateEnabled>
|
||||||
<UpdateInterval>7</UpdateInterval>
|
<UpdateInterval>7</UpdateInterval>
|
||||||
|
|||||||
@@ -33,6 +33,6 @@ using System.Security;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.2.5.0")]
|
[assembly: AssemblyVersion("1.2.7.0")]
|
||||||
[assembly: AssemblyFileVersion("1.2.5.0")]
|
[assembly: AssemblyFileVersion("1.2.7.0")]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user