public static void RegForwarding(Options option, params string[] keys) { if (keys == null || keys.Length == 0) { return; } var backup = PathEx.Combine($"%TEMP%\\backup-{{{Math.Abs(PathEx.LocalPath.GetHashCode())}}}.reg"); var file = PathEx.Combine(PathEx.LocalDir, "Data\\settings.reg"); switch (option) { case Options.Exit: if (keys.Length > 0) { Reg.ExportKeys(file, keys); foreach (var key in keys) { Reg.RemoveSubKey(key); } } if (!File.Exists(backup)) { return; } Reg.ImportFile(backup); File.Delete(backup); break; default: if (!keys.Any(x => Reg.EntryExists(x, "Portable App"))) { if (!File.Exists(backup)) { Reg.ExportKeys(backup, keys); } foreach (var key in keys) { Reg.RemoveSubKey(key); } } foreach (var key in keys) { Reg.Write(key, "Portable App", "True"); } if (File.Exists(file)) { Reg.ImportFile(file); } break; } }
/// <summary> /// Enables/disables the registry key redirection. /// </summary> /// <param name="option"> /// The option that determines whether the redirect will be enabled or disabled. /// </param> /// <param name="keys"> /// The registry keys for redirecting. /// </param> public static void KeyRedirection(PortalizerActions option, params string[] keys) { if (keys == null || keys.Length == 0) { return; } var backup = PathEx.Combine(Attributes.DataDir, $"Temp\\backup-{{{EnvironmentEx.MachineId}}}.reg"); switch (option) { case PortalizerActions.Disable: if (keys.Length > 0) { Reg.ExportKeys(Attributes.RegFilePath, keys); foreach (var key in keys) { Reg.RemoveSubKey(key); } Reg.RemoveEntry(Attributes.RegPath, nameof(Attributes.RegKeys)); } if (!File.Exists(backup)) { return; } Reg.ImportFile(backup); FileEx.TryDelete(backup); break; default: if (!Reg.SubKeyExists(Attributes.RegPath)) { Reg.CreateNewSubKey(Attributes.RegPath); } if (!Reg.EntryExists(Attributes.RegPath, nameof(Attributes.RegKeys)) && keys.Any(Reg.SubKeyExists)) { try { var dir = Path.GetDirectoryName(backup); if (string.IsNullOrEmpty(dir)) { throw new ArgumentNullException(dir); } if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } FileEx.Delete(backup); } catch (Exception ex) { Log.Write(ex); } if (!File.Exists(backup)) { Reg.ExportKeys(backup, keys); } foreach (var key in keys) { Reg.RemoveSubKey(key); } } Reg.Write(Attributes.RegPath, nameof(Attributes.RegKeys), keys, RegistryValueKind.MultiString); if (File.Exists(Attributes.RegFilePath)) { Reg.ImportFile(Attributes.RegFilePath); } break; } }
internal static bool EntryExists(string entry) => Reg.EntryExists(CurKey, entry);