internal static void EnsureCanonicalFoldersArePresent() { var root = PackageManagerSettings.CoAppRootDirectory; // try to make a convenience symlink: %SYSTEMDRIVE%:\apps var appsdir = "{0}:\\apps".format(root[0]); if (!Directory.Exists(appsdir) && !File.Exists(appsdir)) { Symlink.MakeDirectoryLink("{0}:\\apps".format(root[0]), root); } var pathext = EnvironmentUtility.GetSystemEnvironmentVariable("PATHEXT"); if (pathext.IndexOf(".lnk", StringComparison.CurrentCultureIgnoreCase) == -1) { EnvironmentUtility.SetSystemEnvironmentVariable("PATHEXT", pathext + ";.lnk"); } foreach (var path in CanonicalFolders.Select(folder => Path.Combine(root, folder)).Where(path => !Directory.Exists(path))) { Directory.CreateDirectory(path); } // make sure system paths are updated. var binPath = Path.Combine(root, "bin"); var psPath = Path.Combine(root, "powershell"); if (!EnvironmentUtility.SystemPath.Contains(binPath)) { EnvironmentUtility.SystemPath = EnvironmentUtility.SystemPath.Prepend(binPath); } if (!EnvironmentUtility.PowershellModulePath.Contains(psPath)) { EnvironmentUtility.PowershellModulePath = EnvironmentUtility.PowershellModulePath.Prepend(psPath); } EnvironmentUtility.BroadcastChange(); }