Diagnostics.Process无法使用Adobe Reader打开PDF文件

6
我试图使用Process.Start()打开PDF文件时遇到了问题。程序将进程作为后台进程运行,但没有adobe reader窗口显示出来。一个解决方案是使用chrome.exe,但我的客户希望在默认的Windows程序Adobe Reader上打开。
(我尝试过不强制使用"AcroRd32.exe"和传递完整路径"AcroRd32.exe",但问题依旧)。
有人解决了这个问题吗?
我的代码如下:
var p = new Process
{
    StartInfo = new ProcessStartInfo(@"AcroRd32.exe", @"D:\Tests\81803130000326__.pdf")
};
p.Start();

后台进程:

Background Process image

我也查看了这个问题:Process.Start(/* path to pdf */) doesn't work with Adobe Reader on Windows 8

编辑

编辑信息:忘记说我正在运行带有Adobe Reader DC 2018.009.20044的Windows 10。

编辑2:发现Adobe Reader DC的一个“问题”。它保持了一定的安全级别,不允许我以管理员身份运行它(不要问我为什么)。请查看此链接以获取更多信息:https://forums.adobe.com/thread/1955530

现在我将尝试找到一个解决方案,在没有管理员权限的情况下运行它,或者要求我的客户取消复选框。

解决方案

所以,我已经找到了解决我的问题的方法。自从10.0版本以来,Adobe Reader具有“受保护模式”设置。我编写了一个代码来更改注册表中的该设置,因此用户不需要这样做。链接:https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/protectedmode.html

我希望它能在未来帮助其他人!

解决方案代码

var registroAdobe = Registry.LocalMachine.OpenSubKey(@"Software\Policies\Adobe\Acrobat Reader\DC\", true);
registroAdobe.SetValue("bProtectedMode", 0);

这适用于Acrobat Reader DC。如果需要,您可以运行“Software\Policies\Adobe\"产品和版本。


1
尝试传入AcroRd32.exe的完整路径。 - Botonomous
我直接打开PDF文件,使用以下代码:System.Diagnostics.Process.Start("output.pdf");,这将使用您计算机上安装的默认PDF查看器。 - Pablo Tondolo de Vargas
@Botonomous 就像我说的,我也遇到了同样的问题 :( - Wesley
@PabloTondolodeVargas 发生了同样的事情。 所有这些的工作方式都是相同的。 系统/程序理解并打开进程,但不会打开 Adobe Reader 窗口。 - Wesley
你的程序作为Windows服务运行,或者在Session 0上运行(例如Windows任务计划程序)吗?那么你不能简单地在当前用户的会话中启动应用程序。请参见https://dev59.com/dW855IYBdhLWcg3wilCD,https://stackoverflow.com/questions/5627404/how-can-i-have-a-service-run-a-process-under-the-current-users-session。 - CodeCaster
显示剩余5条评论
2个回答

2

实际上,我发现这在我的电脑上并不起作用,但它让我深入了解了一下。 我发现我的解决方案是:

最初的回答:

var regAdobe = Registry.CurrentUser.OpenSubKey(@"Software\Adobe\Acrobat Reader\DC\Privileged", true);
regAdobe.SetValue("bProtectedMode", 0);

非常相似,但最终需要编辑用户设置而不是本地机器的设置。
干杯!

0

您可以直接使用 System.Diagnostics.Process.Start("") 命令在客户端系统上使用默认的 PDF 阅读器打开文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接