/// <summary> /// レジストリ値をDOSコマンドへコンバート /// </summary> /// <param name="targetKey"></param> /// <param name="valueName"></param> /// <returns></returns> private string CreateDosCommand(RegistryKey targetKey, string valueName) { RegistryValueKind valueKind = targetKey.GetValueKind(valueName); string regValue = ""; switch (valueKind) { case RegistryValueKind.String: case RegistryValueKind.MultiString: case RegistryValueKind.ExpandString: case RegistryValueKind.Binary: regValue = string.Format("\"{0}\"", RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true)); break; case RegistryValueKind.DWord: case RegistryValueKind.QWord: regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); break; case RegistryValueKind.None: default: break; } return(string.Format( "reg add \"{0}\" {1} /d {2} /t {3} /f", targetKey, valueName == "" ? "/ve" : $"/v \"{valueName}\"", regValue, RegistryControl.ValueKindToString(valueKind))); }
/* * /// <summary> * /// レジストリキーをSetコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegKey_ToSetCommand() * { * List<string> commandList = new List<string>(); * * Action<RegistryKey> measureRegistry = null; * measureRegistry = (targetKey) => * { * string[] valueNames = targetKey.GetValueNames(); * if (valueNames.Length > 0) * { * // レジストリ値の設定用コマンド * foreach (string valueName in targetKey.GetValueNames()) * { * RegistryValueKind valueKind = targetKey.GetValueKind(valueName); * string regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("-Value \"{0}\" ", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("-Value {0} ", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * commandList.Add(string.Format( * "Set-Registry -Path \"{0}\" -Name \"{1}\" {2}-Type {3}", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(valueName), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * * } * } * else * { * // レジストリ値設定無し。空レジストリキー作成 * commandList.Add(string.Format("New-Registry -Path \"{0}\"", * ReplaceDoller(targetKey.ToString()))); * } * * // 配下のレジストリキーを再帰的にチェック * if (Recursive) * { * foreach (string keyName in targetKey.GetSubKeyNames()) * { * using (RegistryKey subTargetKey = targetKey.OpenSubKey(keyName, false)) * { * measureRegistry(subTargetKey); * } * } * } * }; * using (RegistryKey regKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * measureRegistry(regKey); * } * * return commandList; * } */ /* * /// <summary> * /// レジストリ値をSetコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegValue_ToSetCommand() * { * List<string> commandList = new List<string>(); * * using (RegistryKey targetKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * RegistryValueKind valueKind = targetKey.GetValueKind(Name); * string regValue = RegistryControl.RegistryValueToString(targetKey, Name, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("-Value \"{0}\" ", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("-Value {0} ", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * commandList.Add(string.Format( * "Set-Registry -Path \"{0}\" -Name \"{1}\" {2}-Type {3}", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(Name), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * } * * return commandList; * } */ /* * /// <summary> * /// レジストリキーをDosコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegKey_ToDosCommand() * { * List<string> commandList = new List<string>(); * * Action<RegistryKey> measureRegistry = null; * measureRegistry = (targetKey) => * { * string[] valueNames = targetKey.GetValueNames(); * if (valueNames.Length > 0) * { * // レジストリ値の設定用コマンド * foreach (string valueName in targetKey.GetValueNames()) * { * RegistryValueKind valueKind = targetKey.GetValueKind(valueName); * string regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("\"{0}\"", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("{0}", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * commandList.Add(string.Format( * "reg add \"{0}\" /v \"{1}\" /d {2} /t {3} /f", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(valueName), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * * } * } * else * { * // レジストリ値設定無し。空レジストリキー作成 * commandList.Add(string.Format("reg add \"{0}\" /ve /f", * ReplaceDoller(targetKey.ToString()))); * commandList.Add(string.Format("reg delete \"{0}\" /ve /f", * ReplaceDoller(targetKey.ToString()))); * } * * // 配下のレジストリキーを再帰的にチェック * if (Recursive) * { * foreach (string keyName in targetKey.GetSubKeyNames()) * { * using (RegistryKey subTargetKey = targetKey.OpenSubKey(keyName, false)) * { * measureRegistry(subTargetKey); * } * } * } * }; * using (RegistryKey regKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * measureRegistry(regKey); * } * * return commandList; * } */ /* * /// <summary> * /// レジストリ値をDosコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegValue_ToDosCommand() * { * List<string> commandList = new List<string>(); * * using (RegistryKey targetKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * RegistryValueKind valueKind = targetKey.GetValueKind(Name); * string regValue = RegistryControl.RegistryValueToString(targetKey, Name, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("\"{0}\"", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("{0}", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * * commandList.Add(string.Format( * "reg add \"{0}\" /v \"{1}\" /d {2} /t {3} /f", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(Name), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * } * * return commandList; * } */ /// <summary> /// レジストリ値をSetコマンドへコンバート /// </summary> /// <param name="targetKey"></param> /// <param name="valueName"></param> /// <returns></returns> private string CreateSetCommand(RegistryKey targetKey, string valueName) { RegistryValueKind valueKind = targetKey.GetValueKind(valueName); string regValue = ""; switch (valueKind) { case RegistryValueKind.String: case RegistryValueKind.MultiString: case RegistryValueKind.ExpandString: case RegistryValueKind.Binary: regValue = string.Format("\"{0}\"", RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true)); break; case RegistryValueKind.DWord: case RegistryValueKind.QWord: regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); break; case RegistryValueKind.None: default: break; } return(string.Format( "Set-Registry -Path \"{0}\" -Name \"{1}\" -Value {2} -Type {3}", ReplaceDoller(targetKey.ToString()), ReplaceDoller(valueName), ReplaceDoller(regValue), RegistryControl.ValueKindToString(valueKind))); }
// レジストリ値をコピー private void CopyRegistryValue(string source, string destination, string name, string destinationName) { using (RegistryKey sourceKey = RegistryControl.GetRegistryKey(source, false, true)) using (RegistryKey destinationKey = RegistryControl.GetRegistryKey(destination, true, true)) { RegistryValueKind valueKind = sourceKey.GetValueKind(name); object sourceValue = valueKind == RegistryValueKind.ExpandString ? sourceKey.GetValue(name, null, RegistryValueOptions.DoNotExpandEnvironmentNames) : sourceKey.GetValue(name); if (destinationName == null) { destinationName = name; } // テスト自動生成 if (Test != null) { TestGenerator.RegistryName(source, name); TestGenerator.RegistryName(destination, destinationName); TestGenerator.RegistryType(destination, destinationName, RegistryControl.ValueKindToString(valueKind)); TestGenerator.RegistryValue(destination, destinationName, RegistryControl.RegistryValueToString(sourceKey, name, valueKind, true)); } destinationKey.SetValue(destinationName, sourceValue, valueKind); // コピー元を削除する場合 sourceKey.DeleteValue(name); } }
/// <summary> /// レジストリのパラメータ名/種類/値のチェック /// </summary> /// <param name="regKey">RegistryKeyインスタンス</param> private void CheckRegValue(RegistryKey regKey) { if (Name == null) { Console.Error.WriteLine("Name無し: {0}", Name); return; } try { RegistryValueKind valueKind = regKey.GetValueKind(Name); // Name用チェック if (Target == Item.NAME) { retValue = true; return; } // Type用チェック if (Target == Item.TYPE) { string tempVlueKind = RegistryControl.ValueKindToString(valueKind); retValue = tempVlueKind == Type; if (!retValue) { Console.Error.WriteLine( "Type不一致: {0} / {1}", Type, tempVlueKind); } return; } // Value用チェック if (valueKind == RegistryValueKind.Binary) { Value = Value.ToUpper(); } retValue = RegistryControl.RegistryValueToString(regKey, Name, valueKind, true) == Value; if (!retValue) { Console.Error.WriteLine("Value不一致 ({0}): {1}", RegistryControl.ValueKindToString(valueKind), Value); Console.WriteLine(RegistryControl.RegistryValueToString(regKey, Name, valueKind, true)); } } catch (IOException) { // Name,Type,Valueの条件で名前の有無チェック Console.Error.WriteLine("Name無し: {0}", Name); } }
/// <summary> /// レジストリのパラメータ名/種類/値のチェック /// 長かったので独立したメソッドに /// </summary> /// <param name="regKey">RegistryKeyインスタンス</param> private void CheckRegValue(RegistryKey regKey) { if (Name == null) { Console.Error.WriteLine("Name無し: {0}", Name); return; } try { RegistryValueKind valueKind = regKey.GetValueKind(Name); // Name用チェック if (Target == Item.NAME) { retValue = true; return; } // Type用チェック if (Target == Item.TYPE) { retValue = valueKind == RegistryControl.StringToValueKind(Type); if (!retValue) { Console.Error.WriteLine( "Type不一致: {0} / {1}", Type, RegistryControl.ValueKindToString(valueKind)); } return; } // Value用チェック if (valueKind == RegistryValueKind.Binary) { Value = Value.ToUpper(); } retValue = RegistryControl.RegistryValueToString(regKey, Name, valueKind, true) == Value; if (!retValue) { Console.Error.WriteLine("Value不一致 ({0}): {1}", RegistryControl.ValueKindToString(valueKind), Value); Console.WriteLine(RegistryControl.RegistryValueToString(regKey, Name, valueKind, true)); } /* * switch (valueKind) * { * case RegistryValueKind.String: * retValue = regKey.GetValue(Name) as string == Value; * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_SZ): {0}", Value); * } * break; * case RegistryValueKind.Binary: * retValue = RegistryControl.RegistryValueToString(regKey, Name, valueKind, true) == Value.ToUpper(); * //retValue = RegistryControl.RegBinaryBytesToString(regKey.GetValue(Name) as byte[]) == Value.ToUpper(); * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_BINARY): {0}", Value); * } * break; * case RegistryValueKind.DWord: * retValue = (int)regKey.GetValue(Name) == int.Parse(Value); * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_DWORD): {0}", Value); * } * break; * case RegistryValueKind.QWord: * retValue = (long)regKey.GetValue(Name) == long.Parse(Value); * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_QWORD): {0}", Value); * } * break; * case RegistryValueKind.MultiString: * retValue = string.Join("\\0", regKey.GetValue(Name) as string[]) == Value; * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_MULTI_SZ): {0}", Value); * } * break; * case RegistryValueKind.ExpandString: * retValue = regKey.GetValue(Name, "", RegistryValueOptions.DoNotExpandEnvironmentNames) as string == Value; * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_EXPAND_SZ): {0}", Value); * } * break; * case RegistryValueKind.None: * retValue = string.IsNullOrEmpty(Value); * break; * } */ } catch (IOException) { // Name,Type,Valueの条件で名前の有無チェック Console.Error.WriteLine("Name無し: {0}", Name); } }