diff options
Diffstat (limited to 'Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs')
-rw-r--r-- | Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs b/Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs index bfde245..c18b1d9 100644 --- a/Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs +++ b/Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs @@ -40,6 +40,7 @@ using ICSharpCode.SharpZipLib.Zip; using Mono.Addins; using Mono.Addins.Description; using System.Collections.Generic; +using System.Linq; namespace Mono.Addins.Setup { @@ -236,8 +237,9 @@ namespace Mono.Addins.Setup return; } + // If the add-in assemblies are loaded, or if there is any file with a write lock, delay the uninstallation HashSet<string> files = new HashSet<string> (GetInstalledFiles (conf)); - if (AddinManager.CheckAssembliesLoaded (files)) { + if (AddinManager.CheckAssembliesLoaded (files) || files.Any (f => HasWriteLock (f))) { uninstallingLoaded = true; return; } @@ -254,6 +256,18 @@ namespace Mono.Addins.Setup CopyAddinFiles (monitor, conf, iaddin.AddinFile, tempFolder); } + bool HasWriteLock (string file) + { + if (!File.Exists (file)) + return false; + try { + File.OpenWrite (file).Close (); + return false; + } catch { + return true; + } + } + IEnumerable<string> GetInstalledFiles (AddinDescription conf) { string basePath = Path.GetDirectoryName (conf.AddinFile); |