以编程方式更改默认PDF阅读器?

时间:2017-04-10 12:03:09

标签: javascript c# c#-4.0 operating-system adobe

如果可以在Windows中以编程方式更改默认PDF阅读器。

例如

如果默认阅读器是" Foxit "在我的机器上,但我需要将我的默认阅读器应用程序更改为" Adob​​e "在c#或javascript中。 我在很多方面都有搜索。但我没有得到解决方案。

这可能吗?请提出你的答案。

1 个答案:

答案 0 :(得分: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,导航到&#34; HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts.pdf \ UserChoice&#34;,按编辑 - &GT;权限,并将所有应用程序包更改为&#34;完全控制&#34;。

THE CATCH:

从Windows 10开始,您可能会在执行此操作时收到通知&#34;应用程序导致.pdf文件的默认应用程序设置出现问题,因此它已重置为Microsoft Edge&#34;。这是微软试图阻止应用程序以编程方式修改默认设置。

解决方法如下:http://www.winhelponline.com/blog/windows-10-resetting-file-associations/

从该页面下载REG文件并首先将其与注册表合并 - 它会阻止Microsoft的应用程序重置默认值。 (在进行大的更改之前备份注册表!!)

请注意,这很糟糕,将用户引导至默认程序对话框可能要好得多。

改为:

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();
}

其中&#34;路径&#34;是要打开的PDF文件的完整路径。