在Windows 8上,Process.Start(/* pdf文件路径 */)与Adobe Reader不兼容。

11

我能够在我的C# / WPF应用程序中创建PDF,并使用以下代码运行:

Process.Start(_pathToPDFFile);

此方法适用于Adobe Acrobat,但不适用于Adobe Reader。当安装了Adobe Reader时,Process.Start()仅在任务管理器中已经运行Reader进程时才能正常运行。

我如何让Adobe Reader在尝试启动PDF时显示PDF呢?


它是否会在"TIFKAM屏幕"中偷偷打开?您能否从注册表中获取Adobe Reader程序的路径,并在Process.Start中显式使用它?Adobe Reader命令行参考Q on Stack Overflow - Andrew Morton
在我的构建PC上也遇到了完全相同的问题。你找到解决方案了吗,碰巧? - Borislav Ivanov
没有,我从那家公司离开已经很久了。 - DaveDev
6个回答

3
在我们的情况下,只有从Visual Studio启动应用程序时才能复现该问题 - 直接启动.exe正常工作。经过一些调试,发现Visual Studio被设置为始终以管理员身份运行,这导致了问题的出现。关闭此设置 (本身已经很困难) 可以解决问题。但仍不确定为什么会发生这种情况。

2
也许可以尝试这样做?我在Windows 8上使用Adobe Reader 11测试了您的代码,对我来说似乎运行良好。也许是问题机器上其他地方出了问题?
var process = new Process();
process.StartInfo = new ProcessStartInfo(@"Path to your PDF.pdf");
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = true;
process.Start();

我在互联网上搜索了2个小时,但是没有找到一个简单的方法来打开PDF文件... 直到我找到了这个!非常感谢您,非常非常感谢! - MrOrhan

0

这是我的做法,虽然可能有一种方法可以从注册表中恢复AcroRd32.exe的确切路径:

String pathToAcroRd32 = Environment.GetEnvironmentVariable("ProgramFiles") + ((Environment.Is64BitOperatingSystem) ? @" (x86)\" : @"\") + "Adobe\Reader 11.0\Reader\AcroRd32.exe";
ProcessStartInfo adobeInfo = new ProcessStartInfo(pathToAcroRd32, _pathToPDFFile);
Process.Start(adobeInfo);

还取决于要启动的Acrobat Reader版本(如果与Adobe Reader 11.0不同),您可能需要更改路径。


这里的示例仅表明您应该通过创建ProcessStartInfo对象将路径显式地传递给Process.Start()。然后需要处理如何恢复或构建此路径。以下示例展示了一种构建路径的方法,但只有在您知道应用程序将在哪些计算机上执行时才能起作用。 - Hybris95

0

首先,您必须检查Adobe Reader是否是pdf文件的默认程序。您可以在控制面板 -> 程序 -> 默认程序 -> 设置关联中进行检查。

如果Adobe Reader是默认的PDF程序,则您的代码应该在Windows 8上工作,在大多数Windows版本中实际上都是如此。

如果Adobe Reader不是默认的PDF程序,则需要获取到AcroRd32.exe的路径。这个post应该会对您有所帮助。然后只需执行Hybris95答案中的代码即可。


0

我没有看到你的完整代码,但是我通过将ProcessStartInfo.UseShellExecute设置为true来解决了类似的问题。


0
我仍然有这个问题,无法使AcroRd32.exe打开,它只停留在任务管理器中。 一个可能的解决方案是选择chrome.exe来启动PDF。

像这样:

var p = new Process
{
    StartInfo = new ProcessStartInfo(@"chrome.exe",  path)
    {
        WindowStyle = ProcessWindowStyle.Maximized
    }
};

p.Start();

如果您有新的问题,请点击提问按钮进行提问。如果您拥有足够的声望,您可以投票支持该问题。或者,将其标记为收藏夹中的“星标”,您将收到任何新答案的通知。 - Mgetz

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