■ 파일 확장자 연결하기

------------------------------------------------------------------------------------------------------------------------


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를 연결시키는 프로그램이다.

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요