【问题标题】:Difference in behavior between ProcessInfo/Process.Start and the Run promptProcessInfo/Process.Start 和运行提示之间的行为差​​异
【发布时间】:2015-09-18 14:14:03
【问题描述】:

我正在尝试从我的应用程序中打开 PDF。我为此经历了几次迭代,并解决了我唯一剩下的选择就是打开 Adob​​e Reader,将 PDF 的位置作为参数传递。我看过的库不支持我需要的(渲染表单字段),Telerik PDF 控件也不支持。因此,我绝对探索了购买选项而不是构建选项。

无论如何,这在运行提示符下可以正常工作,如下所示:

"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" "C:\Users\Foo\AppData\Local\Temp\Bar.pdf"

但是,从代码中,执行以下操作不起作用:

ProcessStartInfo info = new ProcessStartInfo(@"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe", location);
Process.Start(info);

使用 Process.Start,我可以在我的任务管理器列表中看到 Adob​​e 进程作为后台进程,但是没有 UI,而它在运行时完美运行,它显示在 App 下并按照我的预期提供 UI。

我没有看到强制显示 UI 的方法。 MainWindowHandle 为 0,WindowStyle 设置为 Normal,CreateNoWindow 为 false。

我尝试过的其他事情是手动设置 EnvironmentVariables 集合并关闭 shell 执行。我也尝试将用户配置文件加载到进程中,但没有效果。

我需要在这里做什么?

【问题讨论】:

  • 您的代码对我有用。也许是 adobe reader 的问题,我的版本是 11.0.3,我使用的是 .Net 4.5。或 ACL 问题。
  • 我不知道你的问题的解决方案,但我知道我会用什么工具来解决这个问题。 technet.microsoft.com/en-us/library/bb896645.aspx
  • 尝试运行 cmd.exe /c C:\Program Files (x86)\Adobe... 这应该会使环境看起来更像命令行环境。

标签: c# .net winforms pdf


【解决方案1】:

我最终完全解决了这种情况。我使用 iTextSharp 将 PDF 展平,然后我用于渲染 PDF 的常规工具运行良好。谢天谢地,这对我的需求也有其他好处。

我仍然无法解决我所描述的不同行为。我正要通过 ShellExecute 沿着 Win32 的路径走下去,留下一个“我离开的地方”的便条。

【讨论】:

    【解决方案2】:

    *.Pdf 文件始终使用 Adob​​e 阅读器打开,除非您安装了其他一些 pdf 阅读器。所以不要调用adobe应用程序,只需使用Process.start(@"file location and name.pdf")调用文件即可。然后文件将在默认的 pdf 阅读器中打开。 你需要一个系统参考using System.Diagnostics;

    还有一件事,上面您使用Process.Start() 提供文件位置,但请记住,如果提到的应用程序不接受任何参数/指令,这将无济于事。

    Process.Start(@"application.exe", "instructions to application.exe")

    【讨论】:

    • 这是我尝试使用 PI 对象后尝试的首批解决方案之一。它没有不同的行为。
    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 2020-03-14
    • 2011-11-04
    • 2017-10-09
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多