コード例 #1
0
        /// <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)));
        }
コード例 #2
0
        /*
         * /// <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)));
        }
コード例 #3
0
ファイル: MoveRegistry.cs プロジェクト: tgiqfe/PowerReg
        //  レジストリ値をコピー
        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);
                }
        }
コード例 #4
0
ファイル: TestRegistry.cs プロジェクト: tgiqfe/PSFile
        /// <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);
            }
        }
コード例 #5
0
        /// <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);
            }
        }