> 백엔드 개발 > C++ > 설치 프로그램을 사용하지 않고 Windows에서 내 응용 프로그램과 파일 확장자를 프로그래밍 방식으로 연결하려면 어떻게 해야 합니까?

설치 프로그램을 사용하지 않고 Windows에서 내 응용 프로그램과 파일 확장자를 프로그래밍 방식으로 연결하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-19 23:46:09
원래의
539명이 탐색했습니다.

How can I programmatically associate a file extension with my application in Windows without using an installer?

파일 확장자를 애플리케이션과 연결

특정 파일 형식을 편집하는 애플리케이션을 개발할 때 해당 파일 형식에 대한 기본 편집기와 연결해야 하는 경우가 많습니다. 설치 프로그램을 사용하지 않고 이를 달성하는 방법에 대한 확실한 솔루션은 다음과 같습니다.

연관방식 구현:

제공된 코드는 레지스트리를 조작하여 파일을 연결하려고 시도합니다. 그러나 여기에는 몇 가지 문제가 포함되어 있습니다.

  1. 읽기 및 쓰기 권한을 지정하지 않고 현재 사용자의 레지스트리를 엽니다. 이로 인해 키가 성공적으로 수정되지 않을 수 있습니다.
  2. OpenSubKey 대신 CreateSubKey를 사용하여 셸 하위 키를 생성하고 하위 키가 이미 있으면 실패합니다.

수정된 협회 코드:

다음은 이러한 문제를 해결하는 수정된 버전의 코드입니다.

<code class="language-csharp">public static void SetAssociation(string extension, string keyName, string fileDescription, string executablePath)
{
    // 以读写权限打开当前用户的注册表
    using (RegistryKey currentUser = Registry.CurrentUser.OpenSubKey(@"HKEY_CURRENT_USER", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl))
    {
        using (RegistryKey baseKey = currentUser.CreateSubKey(extension))
        {
            baseKey.SetValue("", keyName);
        }

        using (RegistryKey openMethodKey = currentUser.CreateSubKey(keyName))
        {
            openMethodKey.SetValue("", fileDescription);

            // 如果“DefaultIcon”子密钥不存在,则创建它
            if (openMethodKey.OpenSubKey("DefaultIcon") == null)
            {
                using (RegistryKey defaultIconKey = openMethodKey.CreateSubKey("DefaultIcon"))
                {
                    defaultIconKey.SetValue("", "\"" + executablePath + "\",0");
                }
            }

            // 创建 Shell 子密钥并编辑和打开命令子密钥
            using (RegistryKey shellKey = openMethodKey.CreateSubKey("Shell"))
            {
                using (RegistryKey editKey = shellKey.CreateSubKey("edit"))
                {
                    using (RegistryKey editCommandKey = editKey.CreateSubKey("command"))
                    {
                        editCommandKey.SetValue("", "\"" + executablePath + "\" \"%1\"");
                    }
                }

                using (RegistryKey openKey = shellKey.CreateSubKey("open"))
                {
                    using (RegistryKey openCommandKey = openKey.CreateSubKey("command"))
                    {
                        openCommandKey.SetValue("", "\"" + executablePath + "\" \"%1\"");
                    }
                }
            }
        }

        // 在 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 中设置 ProgId
        using (RegistryKey fileExtsKey = currentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" + extension))
        {
            fileExtsKey.SetValue("Progid", keyName);
        }
    }

    // 通知资源管理器更改以刷新其文件关联
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, IntPtr.Zero, IntPtr.Zero);
}</code>
로그인 후 복사

사용 예:

.ucs 파일 확장자를 "UCS Editor"라는 애플리케이션과 연결하려면 다음 코드를 사용할 수 있습니다.

<code class="language-csharp">SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);</code>
로그인 후 복사

기타 참고사항:

  • executablePath가 바로가기나 번들 실행 파일이 아닌 실제 실행 파일을 가리키는지 확인하세요.
  • 파일 확장자가 레지스트리에 아직 등록되지 않은 경우 연결을 설정하기 전에 해당 키를 생성해야 합니다.
  • EnacheAssociationsSet 메소드를 사용하면 여러 파일 형식에 대한 연결을 자동으로 설정할 수 있습니다.

이 수정된 응답은 원본 이미지를 유지하고 더 설명적인 언어를 사용하는 동시에 명확성과 흐름을 개선하기 위해 텍스트를 재구성했습니다. 코드 형식도 가독성을 높였습니다.

위 내용은 설치 프로그램을 사용하지 않고 Windows에서 내 응용 프로그램과 파일 확장자를 프로그래밍 방식으로 연결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿