첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

DSCleaner.zip
0.01MB

▶ RegistryHelper.cs

using System.Security.AccessControl;

using Microsoft.Win32;

namespace DSCleaner
{
    /// <summary>
    /// 레지스트리 헬퍼
    /// </summary>
    public class RegistryHelper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// 레지스트리 키
        /// </summary>
        public RegistryKey registryKey;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 레지스트리 키 - RegistryKey

        /// <summary>
        /// 레지스트리 키
        /// </summary>
        public RegistryKey RegistryKey
        {
            get
            {
                return this.registryKey;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - RegistryHelper(registryKey)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="registryKey">레지스트리 키</param>
        public RegistryHelper(RegistryKey registryKey)
        {
            this.registryKey = registryKey;
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 생성자 - RegistryHelper()

        /// <summary>
        /// 생성자
        /// </summary>
        private RegistryHelper()
        {
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Destructor

        #region 소멸자 - ~RegistryHelper()

        /// <summary>
        /// 소멸자
        /// </summary>
        ~RegistryHelper()
        {
            Close();
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 자식 레지스트리 키 생성하기 - CreateChildRegistryKey(childRegistryKey, registryKeyPermissionCheck)

        /// <summary>
        /// 자식 레지스트리 키 생성하기
        /// </summary>
        /// <param name="childRegistryKey">자식 레지스트리 키</param>
        /// <param name="registryKeyPermissionCheck">레지스트리 키 권한 체크</param>
        /// <returns>레지스트리 키</returns>
        public RegistryKey CreateChildRegistryKey(string childRegistryKey, RegistryKeyPermissionCheck registryKeyPermissionCheck)
        {
            RegistryKey target = this.registryKey.CreateSubKey(childRegistryKey, registryKeyPermissionCheck);

            return target;
        }

        #endregion
        #region 자식 레지스트리 키 생성하기 - CreateChildRegistryKey(childRegistryKey)

        /// <summary>
        /// 자식 레지스트리 키 생성하기
        /// </summary>
        /// <param name="childRegistryKey">자식 레지스트리 키</param>
        /// <returns>레지스트리 키</returns>
        public RegistryKey CreateChildRegistryKey(string childRegistryKey)
        {
            RegistryKey target = CreateChildRegistryKey(childRegistryKey, RegistryKeyPermissionCheck.Default);

            return target;
        }

        #endregion
        #region 자식 레지스트리 키 생성하기 - CreateChildRegistryKey(childRegistryKey, registryKeyPermissionCheck, registrySecurity)

        /// <summary>
        /// 자식 레지스트리 키 생성하기
        /// </summary>
        /// <param name="childRegistryKey">자식 레지스트리 키</param>
        /// <param name="registryKeyPermissionCheck">레지스트리 키 권한 체크</param>
        /// <param name="registrySecurity">레지스트리 보안</param>
        /// <returns>레지스트리 키</returns>
        public RegistryKey CreateChildRegistryKey(string childRegistryKey, RegistryKeyPermissionCheck registryKeyPermissionCheck, RegistrySecurity registrySecurity)
        {
            RegistryKey target = this.registryKey.CreateSubKey(childRegistryKey, registryKeyPermissionCheck, registrySecurity);

            return target;
        }

        #endregion

        #region 자식 레지스트리 키 열기 - OpenChildRegistryKey(childRegistryKey, writable)

        /// <summary>
        /// 자식 레지스트리 키 열기
        /// </summary>
        /// <param name="childRegistryKey">레지스트리 키</param>
        /// <param name="writable">쓰기 가능 여부</param>
        /// <returns>자식 레지스트리 키</returns>
        public RegistryKey OpenChildRegistryKey(string childRegistryKey, bool writable)
        {
            RegistryKey target = this.registryKey.OpenSubKey(childRegistryKey, writable);

            return target;
        }

        #endregion
        #region 자식 레지스트리 키 열기 - OpenChildRegistryKey(childRegistryKey)

        /// <summary>
        /// 자식 레지스트리 키 열기
        /// </summary>
        /// <param name="childRegistryKey">자식 레지스트리 키</param>
        /// <returns>자식 레지스트리 키</returns>
        public RegistryKey OpenChildRegistryKey(string childRegistryKey)
        {
            RegistryKey target = OpenChildRegistryKey(childRegistryKey, true);

            return target;
        }

        #endregion
        #region 자식 레지스트리 키 열기 - OpenChildRegistryKey(childRegistryKey, registryKeyPermissionCheck)

        /// <summary>
        /// 자식 레지스트리 키 열기
        /// </summary>
        /// <param name="childRegistryKey">자식 레지스트리 키</param>
        /// <param name="registryKeyPermissionCheck">레지스트리 키 권한 체크</param>
        /// <returns>자식 레지스트리 키</returns>
        public RegistryKey OpenChildRegistryKey(string childRegistryKey, RegistryKeyPermissionCheck registryKeyPermissionCheck)
        {
            RegistryKey target = this.registryKey.OpenSubKey(childRegistryKey, registryKeyPermissionCheck);

            return target;
        }

        #endregion
        #region 자식 레지스트리 키 열기 - OpenChildRegistryKey(childRegistryKey, registryKeyPermissionCheck, registryRights)

        /// <summary>
        /// 자식 레지스트리 키 열기
        /// </summary>
        /// <param name="childRegistryKey">자식 레지스트리 키</param>
        /// <param name="registryKeyPermissionCheck">레지스트리 키 권한 체크</param>
        /// <param name="registryRights">레지스트리 권리</param>
        /// <returns>자식 레지스트리 키</returns>
        public RegistryKey OpenChildRegistryKey(string childRegistryKey, RegistryKeyPermissionCheck registryKeyPermissionCheck, RegistryRights registryRights)
        {
            RegistryKey target = this.registryKey.OpenSubKey(childRegistryKey, registryKeyPermissionCheck, registryRights);

            return target;
        }

        #endregion

        #region 자식 레지스트리 키명 배열 구하기 - GetChildRegistryKeyNames()

        /// <summary>
        /// 자식 레지스트리 키명 배열 구하기
        /// </summary>
        /// <returns></returns>
        public string[] GetChildRegistryKeyNames()
        {
            string[] targetArray = this.registryKey.GetSubKeyNames();

            return targetArray;
        }

        #endregion

        #region 값 명칭 배열 구하기 - GetValueNames()

        /// <summary>
        /// 값 명칭 배열 구하기
        /// </summary>
        /// <returns></returns>
        public string[] GetValueNames()
        {
            string[] targetArray = this.registryKey.GetValueNames();

            return targetArray;
        }

        #endregion

        #region 값 설정하기 - SetValue(valueName, value)

        /// <summary>
        /// 값 설정하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <param name="value">값</param>
        public void SetValue(string valueName, object value)
        {
            this.registryKey.SetValue(valueName, value);
        }

        #endregion
        #region 값 설정하기 - SetValue(valueName, value, registryValueKind)

        /// <summary>
        /// 값 설정하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <param name="value">값</param>
        /// <param name="registryValueKind">레지스트리 값 종류</param>
        public void SetValue(string valueName, object value, RegistryValueKind registryValueKind)
        {
            this.registryKey.SetValue(valueName, value, registryValueKind);
        }

        #endregion

        #region 값 종류 구하기 - GetValueKind(valueName)

        /// <summary>
        /// 값 종류 구하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <returns>레지스트리 값 종류</returns>
        public RegistryValueKind GetValueKind(string valueName)
        {
            RegistryValueKind target = this.registryKey.GetValueKind(valueName);

            return target;
        }

        #endregion

        #region 값 구하기 - GetValue(valueName)

        /// <summary>
        /// 값 구하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <returns>값</returns>
        public object GetValue(string valueName)
        {
            object value = this.registryKey.GetValue(valueName);

            return value;
        }

        #endregion
        #region 값 구하기 - GetValue(valueName, defaultValue)

        /// <summary>
        /// 값 구하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <param name="defaultValue">기본값</param>
        /// <returns>값</returns>
        public object GetValue(string valueName, object defaultValue)
        {
            object value = this.registryKey.GetValue(valueName, defaultValue);

            return value;
        }

        #endregion
        #region 값 구하기 - GetValue(valueName, defaultValue, registryValueOptions)

        /// <summary>
        /// 값 구하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <param name="defaultValue">기본값</param>
        /// <param name="registryValueOptions">레지스트리 값 옵션</param>
        /// <returns>값</returns>
        public object GetValue(string valueName, object defaultValue, RegistryValueOptions registryValueOptions)
        {
            object value = this.registryKey.GetValue(valueName, defaultValue, registryValueOptions);

            return value;
        }

        #endregion

        #region 값 삭제하기 - DeleteValue(valueName, throwException)

        /// <summary>
        /// 값 삭제하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        /// <param name="throwException">예외 발생 여부</param>
        public void DeleteValue(string valueName, bool throwException)
        {
            this.registryKey.DeleteValue(valueName, throwException);
        }

        #endregion
        #region 값 삭제하기 - DeleteValue(valueName)

        /// <summary>
        /// 값 삭제하기
        /// </summary>
        /// <param name="valueName">값 명칭</param>
        public void DeleteValue(string valueName)
        {
            DeleteValue(valueName, true);
        }

        #endregion

        #region 자식 레지스트리 키 삭제하기 - DeleteChildRegistryKey(registryKey, throwException)

        /// <summary>
        /// 자식 레지스트리 키 삭제하기
        /// </summary>
        /// <param name="registryKey">레지스트리 키</param>
        /// <param name="throwException">예외 발생 여부</param>
        public void DeleteChildRegistryKey(string registryKey, bool throwException)
        {
            this.registryKey.DeleteSubKey(registryKey, throwException);
        }

        #endregion
        #region 자식 레지스트리 키 삭제하기 - DeleteChildRegistryKey(registryKey)

        /// <summary>
        /// 자식 레지스트리 키 삭제하기
        /// </summary>
        /// <param name="registryKey">레지스트리 키</param>
        public void DeleteChildRegistryKey(string registryKey)
        {
            DeleteChildRegistryKey(registryKey, true);
        }

        #endregion

        #region 자식 레지스트리 키 트리 삭제하기 - DeleteChildRegistryKeyTree(registryKey)

        /// <summary>
        /// 자식 레지스트리 키 트리 삭제하기
        /// </summary>
        /// <param name="registryKey">레지스트리 키</param>
        public void DeleteChildRegistryKeyTree(string registryKey)
        {
            this.registryKey.DeleteSubKeyTree(registryKey);
        }

        #endregion

        #region 닫기 - Close()

        /// <summary>
        /// 닫기
        /// </summary>
        public void Close()
        {
            if(this.registryKey != null)
            {
                this.registryKey.Close();

                this.registryKey = null;
            }
        }

        #endregion
    }
}

 

300x250

 

▶ Program.cs

using System;
using System.IO;

using Microsoft.Win32;

namespace DSCleaner
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// RDP 주소
        /// </summary>
        private static string _rdpAddress = "icodebroker.tistory.com";

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            #region Default.rdp 파일을 삭제한다.

            try
            {
                Console.WriteLine("Default.rdp 파일 삭제를 시작합니다.");

                string myDocumentDirectoryPath = Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments);

                string rdpFilePath = Path.Combine(myDocumentDirectoryPath, "Default.rdp");

                File.SetAttributes(rdpFilePath, FileAttributes.Normal);

                try
                {
                    File.Delete(rdpFilePath);

                    Console.WriteLine($"원격 설정 파일을 삭제했습니다 : {rdpFilePath}");
                }
                catch
                {
                    Console.WriteLine($"원격 설정 파일 삭제를 실패했습니다 : {rdpFilePath}");
                }

                Console.WriteLine("Default.rdp 파일 삭제를 종료합니다.");
            }
            catch(Exception exception)
            {
                Console.WriteLine("Default.rdp 파일 삭제시 에러가 발생했습니다.");
                Console.WriteLine("----------------------------------------");
                Console.WriteLine(exception.ToString());
                Console.WriteLine("----------------------------------------");
            }

            #endregion
            #region 레지스트리 설정을 삭제한다.

            try
            {
                Console.WriteLine("레지스트리 설정 삭제를 시작합니다.");

                RegistryKey terminalServerClientKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Terminal Server Client");

                RegistryHelper terminalServerClientHelper = new RegistryHelper(terminalServerClientKey);

                RegistryKey defaultKey = terminalServerClientHelper.OpenChildRegistryKey("Default");

                RegistryHelper defaultHelper = new RegistryHelper(defaultKey);

                foreach(string valueName in defaultHelper.GetValueNames())
                {
                    string value = defaultHelper.GetValue(valueName) as string;

                    if(value != null && value.Equals(_rdpAddress))
                    {
                        defaultHelper.DeleteValue(valueName);

                        Console.WriteLine($"값 항목이 삭제되었습니다 : {valueName} ({value})");
                    }
                }

                RegistryKey serversKey = terminalServerClientHelper.OpenChildRegistryKey("Servers");

                RegistryHelper serversHelper = new RegistryHelper(serversKey);

                string[] serversChildKeyNameArray = serversHelper.GetChildRegistryKeyNames();

                foreach(string serversChildKeyName in serversChildKeyNameArray)
                {
                    if(serversChildKeyName.Equals(_rdpAddress))
                    {
                        serversHelper.DeleteChildRegistryKeyTree(serversChildKeyName);

                        Console.WriteLine($"Server 키의 자식 키 항목이 삭제되었습니다 : {serversChildKeyName}");
                    }
                }

                Console.WriteLine("레지스트리 설정 삭제를 종료합니다.");
            }
            catch(Exception exception)
            {
                Console.WriteLine("레지스트리 설정 삭제시 에러가 발생했습니다.");
                Console.WriteLine("----------------------------------------");
                Console.WriteLine(exception.ToString());
                Console.WriteLine("----------------------------------------");
            }

            #endregion
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요