diff --git a/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj b/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj
index 1685273e7..1b2e07d19 100644
--- a/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj
+++ b/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj
@@ -8,7 +8,7 @@
False
AutoUpdateBuilder
AutoUpdateBuilder
- v4.5
+ v4.6.2
true
diff --git a/BuildTools/DependencyFinder/DependencyFinder.csproj b/BuildTools/DependencyFinder/DependencyFinder.csproj
index 42a948ebf..01266941a 100644
--- a/BuildTools/DependencyFinder/DependencyFinder.csproj
+++ b/BuildTools/DependencyFinder/DependencyFinder.csproj
@@ -8,7 +8,7 @@
False
DependencyFinder
DependencyFinder
- v4.5
+ v4.6.2
true
diff --git a/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj b/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj
index e8524f649..f30a036ef 100644
--- a/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj
+++ b/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj
@@ -10,7 +10,7 @@
False
UpdateVersionStamp
UpdateVersionStamp
- v4.5
+ v4.6.2
diff --git a/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj b/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj
index f5c9563ef..f518279ed 100644
--- a/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj
+++ b/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj
@@ -15,7 +15,7 @@
3.5
Duplicati.snk
- v4.5
+ v4.6.2
false
true
diff --git a/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj b/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj
index bb77bbadc..33bdffdb5 100644
--- a/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj
+++ b/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj
@@ -9,7 +9,7 @@
Duplicati.CommandLine.BackendTool
Duplicati.CommandLine.BackendTool
..\Duplicati.snk
- v4.5
+ v4.6.2
false
true
diff --git a/Duplicati/CommandLine/Duplicati.CommandLine.csproj b/Duplicati/CommandLine/Duplicati.CommandLine.csproj
index cb5e91dd1..60419c63a 100644
--- a/Duplicati/CommandLine/Duplicati.CommandLine.csproj
+++ b/Duplicati/CommandLine/Duplicati.CommandLine.csproj
@@ -16,7 +16,7 @@
3.5
- v4.5
+ v4.6.2
false
true
diff --git a/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj b/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj
index 6a21e8313..c838d0325 100644
--- a/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj
+++ b/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj
@@ -9,7 +9,7 @@
Duplicati.CommandLine.RecoveryTool
Duplicati.CommandLine.RecoveryTool
Duplicati.snk
- v4.5
+ v4.6.2
false
true
diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj
index 4245a3399..4646f08ef 100644
--- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj
+++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj
@@ -25,7 +25,7 @@
false
true
Duplicati.ico
- v4.5
+ v4.6.2
false
true
diff --git a/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj b/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj
index 851c16443..8fc0cc91d 100644
--- a/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj
+++ b/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj
@@ -1,73 +1,29 @@
-
-
+
+
- Debug
- AnyCPU
- {7E119745-1F62-43F0-936C-F312A1912C0B}
- Exe
- False
- Duplicati.Library.AutoUpdater
- Duplicati.Library.AutoUpdater
- ..\..\GUI\Duplicati.GUI.TrayIcon\Duplicati.snk
- Duplicati.Library.AutoUpdater.Program
- v4.5
-
- false
-
-
- true
- full
- false
- bin\Debug
- DEBUG;
- prompt
- 4
- false
- false
-
-
- full
- true
- bin\Release
- prompt
- 4
- false
- false
+ netstandard2.0
+ 2.0.0.7
+ true
+ Duplicati.snk
+ LGPL, Copyright © Duplicati Team 2015
+ Duplicati.Library.AutoUpdater
+ Duplicati Team
+ Duplicati Team
+ AutoUpdater for Duplicati
+ AutoUpdater
+
-
-
- ..\..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll
-
+
+
-
-
-
-
-
-
-
-
-
-
-
- {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}
- Duplicati.Library.Utility
-
-
- {19ECCE09-B5EB-406C-8C57-BAC66997D469}
- Duplicati.Library.Compression
-
-
- {C5899F45-B0FF-483C-9D38-24A9FCAAB237}
- Duplicati.Library.Interface
-
-
- {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}
- Duplicati.License
-
+
+
+
+
+
@@ -76,7 +32,5 @@
-
-
-
+
\ No newline at end of file
diff --git a/Duplicati/Library/AutoUpdater/Duplicati.snk b/Duplicati/Library/AutoUpdater/Duplicati.snk
new file mode 100644
index 000000000..e0c1e2dd8
Binary files /dev/null and b/Duplicati/Library/AutoUpdater/Duplicati.snk differ
diff --git a/Duplicati/Library/AutoUpdater/Properties/AssemblyInfo.cs b/Duplicati/Library/AutoUpdater/Properties/AssemblyInfo.cs
deleted file mode 100644
index 91d331240..000000000
--- a/Duplicati/Library/AutoUpdater/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2015, The Duplicati Team
-
-// http://www.duplicati.com, info@duplicati.com
-//
-// This library is free software; you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation; either version 2.1 of the
-// License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle("Duplicati.Library.AutoUpdater")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion("2.0.0.7")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/Duplicati/Library/AutoUpdater/UpdaterManager.cs b/Duplicati/Library/AutoUpdater/UpdaterManager.cs
index dddee284f..36f0729c8 100644
--- a/Duplicati/Library/AutoUpdater/UpdaterManager.cs
+++ b/Duplicati/Library/AutoUpdater/UpdaterManager.cs
@@ -18,7 +18,7 @@
using System;
using System.Linq;
using System.Collections.Generic;
-using System.IO;
+using System.IO;
using System.Threading.Tasks;
using Duplicati.Library.Interface;
@@ -448,109 +448,109 @@ namespace Duplicati.Library.AutoUpdater
try
{
using (var tempfile = System.IO.File.Open(tempfilename, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
- {
- Action cb = null;
- if (progress != null)
- cb = (s) => { progress(Math.Min(1.0, Math.Max(0.0, (double)s / version.CompressedSize))); };
-
- var wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
- wreq.UserAgent = string.Format("{0} v{1}", APPNAME, SelfVersion.Version);
- wreq.Headers.Add("X-Install-ID", InstallID);
-
- var areq = new Duplicati.Library.Utility.AsyncHttpRequest(wreq);
- using (var resp = areq.GetResponse())
- using (var rss = areq.GetResponseStream())
- using (var pgs = new Duplicati.Library.Utility.ProgressReportingStream(rss, version.CompressedSize, cb))
- {
- Duplicati.Library.Utility.Utility.CopyStream(pgs, tempfile);
- }
-
- var sha256 = System.Security.Cryptography.SHA256.Create();
- var md5 = System.Security.Cryptography.MD5.Create();
-
- if (tempfile.Length != version.CompressedSize)
- throw new Exception(string.Format("Invalid file size {0}, expected {1} for {2}", tempfile.Length, version.CompressedSize, url));
-
- tempfile.Position = 0;
- var sha256hash = Convert.ToBase64String(sha256.ComputeHash(tempfile));
- if (sha256hash != version.SHA256)
- throw new Exception(string.Format("Damaged or corrupted file, sha256 mismatch for {0}", url));
-
-
- tempfile.Position = 0;
- var md5hash = Convert.ToBase64String(md5.ComputeHash(tempfile));
- if (md5hash != version.MD5)
- throw new Exception(string.Format("Damaged or corrupted file, md5 mismatch for {0}", url));
-
- tempfile.Position = 0;
- using (var tempfolder = new Duplicati.Library.Utility.TempFolder())
- using (ICompression zip = new Duplicati.Library.Compression.FileArchiveZip(tempfile, ArchiveMode.Read, new Dictionary()))
- {
- foreach (var file in zip.ListFilesWithSize(""))
- {
- if (System.IO.Path.IsPathRooted(file.Key) || file.Key.Trim().StartsWith("..", StringComparison.OrdinalIgnoreCase))
- throw new Exception(string.Format("Out-of-place file path detected: {0}", file.Key));
-
- var targetpath = System.IO.Path.Combine(tempfolder, file.Key);
- var targetfolder = System.IO.Path.GetDirectoryName(targetpath);
- if (!System.IO.Directory.Exists(targetfolder))
- System.IO.Directory.CreateDirectory(targetfolder);
-
- using (var zs = zip.OpenRead(file.Key))
- using (var fs = System.IO.File.Create(targetpath))
- zs.CopyTo(fs);
- }
-
- if (VerifyUnpackedFolder(tempfolder, version))
- {
- var versionstring = TryParseVersion(version.Version).ToString();
- var targetfolder = System.IO.Path.Combine(INSTALLDIR, versionstring);
- if (System.IO.Directory.Exists(targetfolder))
- System.IO.Directory.Delete(targetfolder, true);
-
- System.IO.Directory.CreateDirectory(targetfolder);
-
- var tempfolderpath = Duplicati.Library.Utility.Utility.AppendDirSeparator(tempfolder);
- var tempfolderlength = tempfolderpath.Length;
-
- // Would be nice, but does not work :(
- //System.IO.Directory.Move(tempfolder, targetfolder);
-
- foreach (var e in Duplicati.Library.Utility.Utility.EnumerateFileSystemEntries(tempfolder))
- {
- var relpath = e.Substring(tempfolderlength);
- if (string.IsNullOrWhiteSpace(relpath))
- continue;
-
- var fullpath = System.IO.Path.Combine(targetfolder, relpath);
- if (relpath.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
- System.IO.Directory.CreateDirectory(fullpath);
- else
- System.IO.File.Copy(e, fullpath);
- }
-
- // Verification will kick in when we list the installed updates
- //VerifyUnpackedFolder(targetfolder, version);
- System.IO.File.WriteAllText(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE), versionstring);
-
- m_hasUpdateInstalled = null;
-
- var obsolete = (from n in FindInstalledVersions()
- where n.Value.Version != version.Version && n.Value.Version != SelfVersion.Version
- let x = TryParseVersion(n.Value.Version)
- orderby x descending
- select n).Skip(1).ToArray();
-
- foreach (var f in obsolete)
- try { System.IO.Directory.Delete(f.Key, true); }
- catch { }
-
- return true;
- }
- else
- {
- throw new Exception(string.Format("Unable to verify unpacked folder for url: {0}", url));
- }
+ {
+ Action cb = null;
+ if (progress != null)
+ cb = (s) => { progress(Math.Min(1.0, Math.Max(0.0, (double)s / version.CompressedSize))); };
+
+ var wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
+ wreq.UserAgent = string.Format("{0} v{1}", APPNAME, SelfVersion.Version);
+ wreq.Headers.Add("X-Install-ID", InstallID);
+
+ var areq = new Duplicati.Library.Utility.AsyncHttpRequest(wreq);
+ using (var resp = areq.GetResponse())
+ using (var rss = areq.GetResponseStream())
+ using (var pgs = new Duplicati.Library.Utility.ProgressReportingStream(rss, version.CompressedSize, cb))
+ {
+ Duplicati.Library.Utility.Utility.CopyStream(pgs, tempfile);
+ }
+
+ var sha256 = System.Security.Cryptography.SHA256.Create();
+ var md5 = System.Security.Cryptography.MD5.Create();
+
+ if (tempfile.Length != version.CompressedSize)
+ throw new Exception(string.Format("Invalid file size {0}, expected {1} for {2}", tempfile.Length, version.CompressedSize, url));
+
+ tempfile.Position = 0;
+ var sha256hash = Convert.ToBase64String(sha256.ComputeHash(tempfile));
+ if (sha256hash != version.SHA256)
+ throw new Exception(string.Format("Damaged or corrupted file, sha256 mismatch for {0}", url));
+
+
+ tempfile.Position = 0;
+ var md5hash = Convert.ToBase64String(md5.ComputeHash(tempfile));
+ if (md5hash != version.MD5)
+ throw new Exception(string.Format("Damaged or corrupted file, md5 mismatch for {0}", url));
+
+ tempfile.Position = 0;
+ using (var tempfolder = new Duplicati.Library.Utility.TempFolder())
+ using (ICompression zip = new Duplicati.Library.Compression.FileArchiveZip(tempfile, ArchiveMode.Read, new Dictionary()))
+ {
+ foreach (var file in zip.ListFilesWithSize(""))
+ {
+ if (System.IO.Path.IsPathRooted(file.Key) || file.Key.Trim().StartsWith("..", StringComparison.OrdinalIgnoreCase))
+ throw new Exception(string.Format("Out-of-place file path detected: {0}", file.Key));
+
+ var targetpath = System.IO.Path.Combine(tempfolder, file.Key);
+ var targetfolder = System.IO.Path.GetDirectoryName(targetpath);
+ if (!System.IO.Directory.Exists(targetfolder))
+ System.IO.Directory.CreateDirectory(targetfolder);
+
+ using (var zs = zip.OpenRead(file.Key))
+ using (var fs = System.IO.File.Create(targetpath))
+ zs.CopyTo(fs);
+ }
+
+ if (VerifyUnpackedFolder(tempfolder, version))
+ {
+ var versionstring = TryParseVersion(version.Version).ToString();
+ var targetfolder = System.IO.Path.Combine(INSTALLDIR, versionstring);
+ if (System.IO.Directory.Exists(targetfolder))
+ System.IO.Directory.Delete(targetfolder, true);
+
+ System.IO.Directory.CreateDirectory(targetfolder);
+
+ var tempfolderpath = Duplicati.Library.Utility.Utility.AppendDirSeparator(tempfolder);
+ var tempfolderlength = tempfolderpath.Length;
+
+ // Would be nice, but does not work :(
+ //System.IO.Directory.Move(tempfolder, targetfolder);
+
+ foreach (var e in Duplicati.Library.Utility.Utility.EnumerateFileSystemEntries(tempfolder))
+ {
+ var relpath = e.Substring(tempfolderlength);
+ if (string.IsNullOrWhiteSpace(relpath))
+ continue;
+
+ var fullpath = System.IO.Path.Combine(targetfolder, relpath);
+ if (relpath.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
+ System.IO.Directory.CreateDirectory(fullpath);
+ else
+ System.IO.File.Copy(e, fullpath);
+ }
+
+ // Verification will kick in when we list the installed updates
+ //VerifyUnpackedFolder(targetfolder, version);
+ System.IO.File.WriteAllText(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE), versionstring);
+
+ m_hasUpdateInstalled = null;
+
+ var obsolete = (from n in FindInstalledVersions()
+ where n.Value.Version != version.Version && n.Value.Version != SelfVersion.Version
+ let x = TryParseVersion(n.Value.Version)
+ orderby x descending
+ select n).Skip(1).ToArray();
+
+ foreach (var f in obsolete)
+ try { System.IO.Directory.Delete(f.Key, true); }
+ catch { }
+
+ return true;
+ }
+ else
+ {
+ throw new Exception(string.Format("Unable to verify unpacked folder for url: {0}", url));
+ }
}
}
}
@@ -1035,7 +1035,8 @@ namespace Duplicati.Library.AutoUpdater
m_hasUpdateInstalled = null;
// Check if there are updates installed, otherwise use current
- KeyValuePair best = new KeyValuePair(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, SelfVersion);
+ KeyValuePair best = new KeyValuePair(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), SelfVersion);
+
if (HasUpdateInstalled)
best = m_hasUpdateInstalled.Value;
@@ -1066,9 +1067,6 @@ namespace Duplicati.Library.AutoUpdater
public static int RunFromMostRecent(System.Reflection.MethodInfo method, string[] cmdargs, AutoUpdateStrategy defaultstrategy = AutoUpdateStrategy.CheckDuring)
{
- if (Library.Utility.Utility.ParseBool(Environment.GetEnvironmentVariable("AUTOUPDATER_USE_APPDOMAIN"), false))
- return RunFromMostRecentAppDomain(method, cmdargs, defaultstrategy);
- else
return RunFromMostRecentSpawn(method, cmdargs, defaultstrategy);
}
@@ -1136,133 +1134,6 @@ namespace Duplicati.Library.AutoUpdater
}
}
-
- public static int RunFromMostRecentAppDomain(System.Reflection.MethodInfo method, string[] cmdargs, AutoUpdateStrategy defaultstrategy = AutoUpdateStrategy.CheckDuring)
- {
- // If the update is disabled, go straight in
- if (DISABLE_UPDATE_DOMAIN)
- return RunMethod(method, cmdargs);
-
- // If we are not the primary domain, just execute
- if (!AppDomain.CurrentDomain.IsDefaultAppDomain())
- {
- int r = 0;
- WrapWithUpdater(defaultstrategy, () => {
- r = RunMethod(method, cmdargs);
- });
-
- return r;
- }
-
- // If we are a re-launch, wait briefly for the other process to exit
- var sleepmarker = System.Environment.GetEnvironmentVariable(string.Format(SLEEP_ENVNAME_TEMPLATE, APPNAME));
- if (!string.IsNullOrWhiteSpace(sleepmarker))
- {
- System.Environment.SetEnvironmentVariable(string.Format(SLEEP_ENVNAME_TEMPLATE, APPNAME), null);
- System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));
- }
-
- // Check if there are updates installed, otherwise use current
- KeyValuePair best = new KeyValuePair(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, SelfVersion);
- if (HasUpdateInstalled)
- best = m_hasUpdateInstalled.Value;
-
- if (INSTALLDIR != null && System.IO.File.Exists(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE)))
- {
- try
- {
- var current = System.IO.File.ReadAllText(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE)).Trim();
- if (!string.IsNullOrWhiteSpace(current))
- {
- var targetfolder = System.IO.Path.Combine(INSTALLDIR, current);
- var currentmanifest = ReadInstalledManifest(targetfolder);
- if (currentmanifest != null && TryParseVersion(currentmanifest.Version) > TryParseVersion(best.Value.Version) && VerifyUnpackedFolder(targetfolder, currentmanifest))
- best = new KeyValuePair(targetfolder, currentmanifest);
- }
- }
- catch (Exception ex)
- {
- if (OnError != null)
- OnError(ex);
- }
- }
-
- Environment.SetEnvironmentVariable(string.Format(BASEINSTALLDIR_ENVNAME_TEMPLATE, APPNAME), InstalledBaseDir);
-
- var folder = best.Key;
-
- // Basic idea with the loop is that the running AppDomain can use
- // RUN_UPDATED_ENVNAME_TEMPLATE to signal that a new version is ready
- // when the caller exits, the new update is executed
- //
- // This allows more or less seamless updates
- //
-
- int result = 0;
- while (!string.IsNullOrWhiteSpace(folder) && System.IO.Directory.Exists(folder))
- {
- var prevfolder = folder;
- // Create the new domain
- var domain = AppDomain.CreateDomain(
- "UpdateDomain",
- null,
- folder,
- "",
- false
- );
-
- domain.SetData("LOCALIZATION_FOLDER", InstalledBaseDir);
-
- result = domain.ExecuteAssemblyByName(method.DeclaringType.Assembly.GetName().Name, cmdargs);
-
- folder = (string)domain.GetData(RUN_UPDATED_FOLDER_PATH);
-
- try { AppDomain.Unload(domain); }
- catch (Exception ex)
- {
- Console.WriteLine("Appdomain unload error: {0}", ex);
- }
-
- if (!string.IsNullOrWhiteSpace(folder))
- {
- if (!VerifyUnpackedFolder(folder))
- folder = prevfolder; //Go back and run the previous version
- else if (RequiresRespawn)
- {
- // We have a valid update, and the current instance is terminated.
- // But due to external libraries, we need to re-spawn the original process
-
- try
- {
- var app = Environment.GetCommandLineArgs().First();
- var args = Library.Utility.Utility.WrapAsCommandLine(Environment.GetCommandLineArgs().Skip(1), false);
-
- if (!System.IO.Path.IsPathRooted(app))
- app = System.IO.Path.Combine(InstalledBaseDir, app);
-
-
- // Re-launch but give the OS a little time to fully unload all open handles, etc.
- var si = new System.Diagnostics.ProcessStartInfo(app, args);
- si.UseShellExecute = false;
- si.EnvironmentVariables.Add(string.Format(SLEEP_ENVNAME_TEMPLATE, APPNAME), "1");
-
- System.Diagnostics.Process.Start(si);
-
- return 0;
- }
- catch (Exception ex)
- {
- if (OnError != null)
- OnError(ex);
- folder = prevfolder;
- }
- }
- }
- }
-
- return result;
- }
-
}
}
diff --git a/Duplicati/Library/AutoUpdater/packages.config b/Duplicati/Library/AutoUpdater/packages.config
deleted file mode 100644
index ee51c2373..000000000
--- a/Duplicati/Library/AutoUpdater/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj b/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj
index 2edbccc16..5f0bda4bd 100644
--- a/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj
+++ b/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
@@ -11,6 +11,8 @@
Duplicati Team
An alternative FTP backend for Duplicati
AlternativeFTP
+ Duplicati.Backend.AlternativeFTP
+ Duplicati.Backend.AlternativeFTP
diff --git a/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj b/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj
index 002c8b4be..56cecb784 100644
--- a/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj
+++ b/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj
@@ -2,7 +2,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj b/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj
index 4e7636344..065c4ac44 100644
--- a/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj
+++ b/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj b/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj
index 7bb661a68..5242801e0 100644
--- a/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj
+++ b/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj b/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj
index 26033863d..ea7d943b9 100644
--- a/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj
+++ b/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj b/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj
index 6d3845eb7..b548fd3de 100644
--- a/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj
+++ b/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj b/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj
index aec236659..f726e4a11 100644
--- a/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj
+++ b/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj b/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj
index e8de7fca2..d76f61c3c 100644
--- a/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj
+++ b/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj b/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj
index 6ed240c43..ad601dc49 100644
--- a/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj
+++ b/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj b/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj
index 80b56f904..3c3f9b4b3 100644
--- a/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj
+++ b/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj b/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj
index 4270c70b1..9c559df4f 100644
--- a/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj
+++ b/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj b/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj
index 53d69beb9..a6da09f96 100644
--- a/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj
+++ b/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj b/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj
index c76f1ba99..096c0bc0f 100644
--- a/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj
+++ b/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj b/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj
index 4b06cb045..857c371b0 100644
--- a/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj
+++ b/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj b/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj
index 852753fad..8bda9f48a 100644
--- a/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj
+++ b/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj b/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj
index f1b936f00..6cee26059 100644
--- a/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj
+++ b/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj b/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj
index 3a471eb61..dd8bfe2d3 100644
--- a/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj
+++ b/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj b/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj
index 7c2568eee..a64941325 100644
--- a/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj
+++ b/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj b/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj
index e0309e806..d0bc97259 100644
--- a/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj
+++ b/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj b/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj
index 3f7c8fc82..aa277f0a7 100644
--- a/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj
+++ b/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj
@@ -1,7 +1,7 @@
- net45
+ net462
2.0.0.7
true
Duplicati.snk
@@ -17,7 +17,7 @@
-
+
diff --git a/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj b/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj
index 73ee68db7..facffe5b9 100644
--- a/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj
+++ b/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj b/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj
index 8a90a381f..837b69fc8 100644
--- a/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj
+++ b/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj b/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj
index 02091ed51..3a801b162 100644
--- a/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj
+++ b/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj b/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj
index 86ae3443e..5272c206f 100644
--- a/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj
+++ b/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj b/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj
index 7624b1424..1253a98c5 100644
--- a/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj
+++ b/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj
@@ -12,7 +12,7 @@
3.5
- v4.5
+ v4.6.2
diff --git a/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj b/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj
index 82439179a..bc60c1df1 100644
--- a/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj
+++ b/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj
@@ -12,7 +12,7 @@
3.5
- v4.5
+ v4.6.2
diff --git a/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj b/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj
index 6a50ae3ef..005bc81c7 100644
--- a/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj
+++ b/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj b/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj
index 81d79a927..43d12e342 100644
--- a/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj
+++ b/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net45
+ netstandard2.0
2.0.0.7
true
Duplicati.snk
diff --git a/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj b/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj
index 512a87951..04fc4bcb4 100644
--- a/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj
+++ b/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj
@@ -12,7 +12,7 @@
3.5
- v4.5
+ v4.6.2
diff --git a/Duplicati/Library/Main/Duplicati.Library.Main.csproj b/Duplicati/Library/Main/Duplicati.Library.Main.csproj
index 657f584aa..3b7deddb8 100644
--- a/Duplicati/Library/Main/Duplicati.Library.Main.csproj
+++ b/Duplicati/Library/Main/Duplicati.Library.Main.csproj
@@ -12,7 +12,7 @@
3.5
- v4.5
+ v4.6.2
diff --git a/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj b/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj
index a23687eed..4ebcae093 100644
--- a/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj
+++ b/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj
@@ -14,7 +14,7 @@
3.5
- v4.5
+ v4.6.2
false
diff --git a/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj b/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj
index f6f01f7d9..a1824b73b 100644
--- a/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj
+++ b/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj
@@ -8,7 +8,7 @@
Duplicati.Library.SQLiteHelper
SQLiteHelper
..\..\GUI\Duplicati.GUI.TrayIcon\Duplicati.snk
- v4.5
+ v4.6.2
false
diff --git a/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj b/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj
index c8aeceac0..b23fb672f 100644
--- a/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj
+++ b/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj
@@ -15,7 +15,7 @@
3.5
- v4.5
+ v4.6.2
false
diff --git a/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj b/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj
index b00614bad..b1ee90b19 100644
--- a/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj
+++ b/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj
@@ -7,7 +7,7 @@
Library
Duplicati.Library.UsageReporter
Duplicati.Library.UsageReporter
- v4.5
+ v4.6.2
Duplicati.snk
false
diff --git a/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj b/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj
index 5ed6a76b1..a9f019889 100644
--- a/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj
+++ b/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -12,7 +12,7 @@
3.5
- v4.5
+ v4.6.2
@@ -35,6 +35,9 @@
prompt
4
+
+ true
+
diff --git a/Duplicati/License/Duplicati.License.csproj b/Duplicati/License/Duplicati.License.csproj
index 58e85d010..ed5b000f4 100644
--- a/Duplicati/License/Duplicati.License.csproj
+++ b/Duplicati/License/Duplicati.License.csproj
@@ -14,7 +14,7 @@
3.5
- v4.5
+ v4.6.2
false
@@ -37,6 +37,9 @@
4
false
+
+ true
+