Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono-addins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs')
-rw-r--r--Mono.Addins.Setup/Mono.Addins.Setup/AddinPackage.cs16
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);