如果可以在Windows中以编程方式更改默认PDF阅读器。
例如,
如果默认阅读器是" Foxit "在我的机器上,但我需要将我的默认阅读器应用程序更改为" Adobe "在c#或javascript中。 我在很多方面都有搜索。但我没有得到解决方案。
这可能吗?请提出你的答案。
答案 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文件的完整路径。