2017-04-10 10 views
0

WindowsでデフォルトのPDFリーダーをプログラムで変更することができる場合。たとえばについてはデフォルトのPDFリーダーをプログラムで変更しますか?

デフォルトのリーダーは、私のマシンで「Foxitの」だった、しかし、私はC#またはJavaScriptで「アドビ」に私のデフォルトのリーダーアプリを変更する必要がある場合。 私はいろいろな方法で検索しています。私は解決策を得ていません。

これが可能です。あなたの答えを提案してください。アプリケーションが管理者権限を持っている場合

+1

おそらくこれを行うことはできますが、ユーザーの設定を迷惑にしてしまう可能性があります。 – DavidG

+3

デフォルトのプログラム設定はコンピュータのレジストリに保存されます...これはあなたのプログラムがレジストリを編集する必要があることを意味します:) [役立つかもしれません](https://superuser.com/questions/436939/レジストリに保存されている既定のプログラム関連) –

+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);を使用することができます。

EDIT:

レジストリ値のアクセス権を変更する必要があるかもしれません - この実行にregeditを行うには、に移動し、 "HKEY_CURRENT_USER \ソフトウェア\マイクロソフト\ Windowsの\ CurrentVersionの\ Explorerの\ FileExts.pdf \ UserChoice"、 「編集」 - >「権限」を押し、すべてのアプリケーション・パッケージを「フル・コントロール」に変更します。

CATCH:のWindows 10のよう

これを実行するとき、あなたは「それは、Microsoft Edgeにリセットされたので、アプリは、.pdfファイルのデフォルトアプリの設定に問題を起こした」という通知を受け取ることができます。これは、Microsoftがこのようなプログラムでデフォルトを変更するのを止める試みです。

回避策はここにある:http://www.winhelponline.com/blog/windows-10-resetting-file-associations/

そのページからのREGファイルをダウンロードして、最初のレジストリにマージ - それはデフォルトをリセットするから、Microsoftのアプリケーションを防ぐことができます。 (大きな変更を加える前にレジストリをバックアップしてください!!)

これはかなりハッキーです。ユーザーをデフォルトのプログラムダイアログに誘導するほうがずっと良いでしょう。

が代わりにこれを行うには:

「パス」がオープンする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例外をスローします。 mscorlib.dllで 'System.UnauthorizedAccessException'の未処理の例外が発生しました 追加情報:レジストリキー 'HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .pdf \ UserChoice'へのアクセスが拒否されました。 なぜ例外がスローされるのですか? –

+0

プロジェクトを管理者モードで開き、このコードを実行できますが、アクセス拒否エラーがスローされます。このために私を助けてください –

+0

レジストリ値のアクセス許可が原因で例外がスローされます。これを変更するには、レジストリエディタ(Windowsキー+ rキーを押し、 "regedit"と入力してEnterキーを押す)を開き、 "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .pdf \ UserChoice"メニュー - >権限、 "すべてのアプリケーションパッケージ"をクリックし、 "フルコントロール"ボックスをチェックしてください。このコードを実行するマシンであれば、これを行う必要があります。 –

関連する問題