첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestSolution.zip
다운로드

[TestProject 프로젝트]

▶ Program.cs

using System;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

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

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        /// <param name="argumentArray">인자 배열</param>
        private static void Main(string[] argumentArray)
        {
            if(argumentArray.Length < 1)
            {
                return;
            }

            Console.WriteLine("테스트 프로그램이 실행되었습니다 : " + argumentArray[0]);

            Console.ReadKey(true);
        }

        #endregion
    }
}

 

[TestRegister 프로젝트]

▶ Program.cs

using System;

using Microsoft.Win32;

namespace TestRegister
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

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

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            RegisterFileExtension(".test", "TestProject.test", "테스트 확장자", @"D:\TestSolution\Bin\Release\TestProject.exe");

            Console.WriteLine("테스트 확장자를 등록했습니다.");

            Console.WriteLine("테스트 확장자 등록을 취소하기 위해서 아무 키나 눌러 주시기 바랍니다.");

            Console.ReadKey(true);

            UnregisterFileExtension(".test", "TestProject.test");

            Console.WriteLine("테스트 확장자 등록을 취소했습니다.");
        }

        #endregion

        #region 하위 레지스트리 키 체크하기 - CheckSubsidaryRegistryKey(registryKey, subsidaryKeyName)

        /// <summary>
        /// 하위 레지스트리 키 체크하기
        /// </summary>
        /// <param name="registryKey">레지스트리 키</param>
        /// <param name="subsidaryKeyName">하위 키명</param>
        /// <returns>하위 레지스트리 키 체크 결과</returns>
        private static bool CheckSubsidaryRegistryKey(RegistryKey registryKey, string subsidaryKeyName)
        {
            RegistryKey subsidaryRegistryKey = null;

            try
            {
                subsidaryRegistryKey = registryKey.OpenSubKey(subsidaryKeyName);

                return subsidaryRegistryKey != null;
            }
            finally
            {
                if(subsidaryRegistryKey != null)
                {
                    subsidaryRegistryKey.Close();
                }
            }
        }

        #endregion
        #region 레지스트리 키 삭제하기 - DeleteRegistryKey(registryKey, subsidaryKeyName, deleteSubsidaryKeyTree)

        /// <summary>
        /// 레지스트리 키 삭제하기
        /// </summary>
        /// <param name="registryKey">레지스트리 키</param>
        /// <param name="subsidaryKeyName">하위 키명</param>
        /// <param name="deleteSubsidaryKeyTree">하위 키 트리 삭제 여부</param>
        private static void DeleteRegistryKey(RegistryKey registryKey, string subsidaryKeyName, bool deleteSubsidaryKeyTree)
        {
            if(!CheckSubsidaryRegistryKey(registryKey, subsidaryKeyName))
            {
                return;
            }

            if(deleteSubsidaryKeyTree)
            {
                registryKey.DeleteSubKeyTree(subsidaryKeyName);
            }
            else
            {
                registryKey.DeleteSubKey(subsidaryKeyName);
            }
        }

        #endregion

        #region 파일 확장자 등록하기 - RegisterFileExtension(fileExtension, fileType, fileDescription, executableFilePath)

        /// <summary>
        /// 파일 확장자 등록하기
        /// </summary>
        /// <param name="fileExtension">파일 확장자</param>
        /// <param name="fileType">파일 타입</param>
        /// <param name="fileDescription">파일 설명</param>
        /// <param name="executableFilePath">실행 파일 경로</param>
        private static void RegisterFileExtension(string fileExtension, string fileType, string fileDescription, string executableFilePath)
        {
            using(RegistryKey classesRegistryKey = Registry.CurrentUser.OpenSubKey(@"Software\Classes", true))
            {
                using(RegistryKey fileExtensionRegistryKey = classesRegistryKey.CreateSubKey(fileExtension))
                {
                    fileExtensionRegistryKey.SetValue(null, fileType);
                }

                using(RegistryKey fileTypeRegistryKey = classesRegistryKey.CreateSubKey(fileType))
                {
                    fileTypeRegistryKey.SetValue(null, fileDescription);

                    using (RegistryKey shellRegistryKey = fileTypeRegistryKey.CreateSubKey("shell"))
                    {
                        using(RegistryKey openRegistryKey = shellRegistryKey.CreateSubKey("open"))
                        {
                            using(RegistryKey commandRegistryKey = openRegistryKey.CreateSubKey("command"))
                            {
                                string command = string.Format("\"{0}\" \"%1\"", executableFilePath);

                                commandRegistryKey.SetValue(null, command);
                            }
                        }
                    }
                }
            }
        }

        #endregion
        #region 파일 확장자 등록 취소하기 - UnregisterFileExtension(fileExtension, fileType)

        /// <summary>
        /// 파일 확장자 등록 취소하기
        /// </summary>
        /// <param name="fileExtension">파일 확장자</param>
        /// <param name="fileType">파일 타입</param>
        private static void UnregisterFileExtension(string fileExtension, string fileType)
        {
            using(RegistryKey classesRegistryKey = Registry.CurrentUser.OpenSubKey(@"Software\Classes", true))
            {
                DeleteRegistryKey(classesRegistryKey, fileExtension, false);
                DeleteRegistryKey(classesRegistryKey, fileType     , true);
            }
        }

        #endregion
    }
}

※ TestProject.exe는 .test 확장자 파일과 연결되는 프로그램이다.

※ TestRegister.exe는 .test 확장자와 TestProject.exe를 연결시키는 프로그램이다.

728x90
반응형
그리드형
Posted by 사용자 icodebroker

댓글을 달아 주세요