diff --git a/src/Umbraco.Core/IO/IOHelper.cs b/src/Umbraco.Core/IO/IOHelper.cs
index 286acf0285..de27f13748 100644
--- a/src/Umbraco.Core/IO/IOHelper.cs
+++ b/src/Umbraco.Core/IO/IOHelper.cs
@@ -4,11 +4,11 @@ using System.Globalization;
using System.Reflection;
using System.IO;
using System.Configuration;
+using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using System.Web.Hosting;
using Umbraco.Core.Configuration;
-using Umbraco.Core.Logging;
namespace Umbraco.Core.IO
{
@@ -351,7 +351,21 @@ namespace Umbraco.Core.IO
writer.Write(contents);
}
}
-
- }
+
+ }
+
+ ///
+ /// Checks if a given path is a full path including drive letter
+ ///
+ ///
+ ///
+ // From: http://stackoverflow.com/a/35046453/5018
+ internal static bool IsFullPath(this string path)
+ {
+ return string.IsNullOrWhiteSpace(path) == false
+ && path.IndexOfAny(Path.GetInvalidPathChars().ToArray()) == -1
+ && Path.IsPathRooted(path)
+ && Path.GetPathRoot(path).Equals(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) == false;
+ }
}
}
diff --git a/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs b/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs
index a5ae2f5015..dc66592cff 100644
--- a/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs
+++ b/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs
@@ -145,6 +145,18 @@ namespace umbraco.cms.businesslogic.packager {
var dataTypes = TryGetIntegerIds(Data.DataTypes).Select(dataTypeService.GetDataTypeDefinitionById).ToList();
var dictionaryItems = TryGetIntegerIds(Data.DictionaryItems).Select(localizationService.GetDictionaryItemById).ToList();
var languages = TryGetIntegerIds(Data.Languages).Select(localizationService.GetLanguageById).ToList();
+
+ for (var i = 0; i < Data.Files.Count; i++)
+ {
+ var filePath = Data.Files[i];
+ if (filePath.IsFullPath())
+ continue;
+
+ filePath = filePath.TrimStart('~');
+ if (filePath.StartsWith("/") == false)
+ filePath = string.Format("/{0}", filePath);
+ Data.Files[i] = IOHelper.MapPath(filePath);
+ }
return new InstallationSummary
{