2017-04-10 5 views
0

Windows에서 프로그래밍 방식으로 기본 PDF 판독기를 변경할 수있는 경우.기본 PDF 판독기를 프로그래밍 방식으로 변경 하시겠습니까?

예를를 들어

,

기본 리더는 내 컴퓨터에서 "Foxit"이었다, 그러나 나는 C# 또는 자바 스크립트에 "어도비"내 기본 리더 응용 프로그램을 변경해야하는 경우. 여러 가지 방법으로 검색 할 수 있습니다. 그러나 나는 해결책을 얻지 못한다.

가능합니다. 답을 제시해주십시오. 응용 프로그램이 관리자 권한이있는 경우

+1

이 작업을 수행 할 수는 있지만 설정을 잘못 사용하면 사용자를 괴롭 히게됩니다. – DavidG

+3

기본 프로그램 설정이 컴퓨터 레지스트리에 저장됩니다 ... 이것은 프로그램이 레지스트리를 편집해야한다는 것을 의미합니다 :) [도움이 될만한 것] (https://superuser.com/questions/436939/) where-is-the-default-program-associations-in-the-registry) –

+0

위의 링크에서 삭제할 수 없습니다. 레지스트리 키를 사용하여 시스템의 기본 PDF 리더를 변경할 수 있는지 여부를 알려주십시오. 그렇다면 코드로 설명하십시오. 업데이트 주셔서 감사합니다. –

답변

1

다음과 같은 것을 사용할 수 있습니다

public enum Readers 
{ 
    AdobeReader = 0, 
    FoxitReader = 1 
} 

Dictionary<int, string> _PDFReaders = new Dictionary<int, string>() 
{ 
    { 0,"AcroExch.Document.DC" }, 
    { 1, "FoxitReader.Document" } 
}; 

public void SetPDFDefault(Readers program) 
{ 
    string nVal = _PDFReaders[(int)program]; 
    Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice", 
     "ProgId", nVal,RegistryValueKind.String); 
} 

그런 다음 기본값을 변경 SetPDFDefault(Readers.AdobeReader);를 사용할 수 있습니다.

편집 :

당신은 레지스트리 값에 대한 사용 권한을 변경해야 할 수도 있습니다

-이 실행을 regedit를 할로 이동 "HKEY_CURRENT_USER \ 소프트웨어 마이크로 소프트 \ 윈도우 \ CurrentVersion \ Explorer \ FileExts.pdf \ UserChoice \", 편집 -> 권한을 누르고 모든 응용 프로그램 패키지를 "모든 권한"으로 변경하십시오.

캐치 : 것을이 일을 할 때 "앱은 .PDF 파일의 기본 응용 프로그램 설정에 문제가 발생이 마이크로 소프트 가장자리에 다시 그래서,"

윈도우 10로, 당신은 알림을받을 수 있습니다. 이것은 Microsoft에서 앱이 프로그래밍 방식으로 기본값을 수정하지 못하도록하려는 것입니다.

해결

은 여기에 있습니다 : http://www.winhelponline.com/blog/windows-10-resetting-file-associations/

해당 페이지에서 REG 파일을 다운로드 먼저 레지스트리와 병합 -이 기본값을 재설정에서 마이크로 소프트의 응용 프로그램을 방지 할 수 있습니다. (큰 변화를주기 전에 레지스트리를 백업해라!)

이것은 아주 해킹 된 것이므로 사용자를 기본 프로그램 대화 상자로 안내하는 것이 훨씬 낫다는 것을 유의하십시오.

대신이 작업을 수행하려면

"경로"열 수있는 PDF 파일의 전체 경로입니다
public void ShowDefaultDialog(string path) 
{ 
    System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
    proc.EnableRaisingEvents = false; 
    proc.StartInfo.FileName = "rundll32.exe"; 
    proc.StartInfo.Arguments = "shell32,OpenAs_RunDLL " + path; 
    proc.Start(); 
} 

.

+0

이 코드는 Null 예외를 throw합니다. mscorlib.dll에서 'System.UnauthorizedAccessException'유형의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 'HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .pdf \ UserChoice'레지스트리 키에 대한 액세스가 거부되었습니다. 왜 예외가 발생합니까? –

+0

관리자 모드로 프로젝트를 연 다음이 코드를 실행할 수 있지만 액세스 거부 오류가 발생합니다. 이 일을 도와주세요 –

+0

레지스트리 값에 대한 권한 때문에 예외가 throw됩니다. 이를 변경하려면 레지스트리 편집기 (Windows 키 + r을 입력하고 "regedit"를 입력하고 Enter 키를 누릅니다)를 열고 "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .pdf \ UserChoice"로 이동 한 다음 편집 메뉴 -> 사용 권한을 클릭하고 "모든 응용 프로그램 패키지"를 클릭하고 "모든 권한"상자를 선택하십시오. 이 코드를 실행하려는 모든 컴퓨터에서이 작업을 수행해야합니다. –