【问题标题】:How to open a PDF with Inno Setup on Windows 10?如何在 Windows 10 上使用 Inno Setup 打开 PDF?
【发布时间】:2016-10-06 20:16:44
【问题描述】:

如何在 Windows 10 上从 Inno Setup 安装程序打开 PDF?我正在尝试显示帮助文档,而我使用的技术 (based on comments on this question) 适用于 Windows 7,但在 Windows 10 上运行时不会发生任何事情(文件未打开,并且未报告错误消息)。

具体来说,当尝试在需要提升权限的安装程序中打开 PDF 时(在使用 ShellExec() 在自定义代码部分安装之前或在使用 [Run] 部分安装之后使用 shellexec 标志)时,它将生成 2 个 Adob​​e 进程,但不会打开任何窗口(此外,在手动终止这些进程之前,无法打开其他 PDF)。但是,如果出现以下情况,PDF 将打开:

  1. 另一个 PDF 已打开,
  2. 安装程序是从已经提升的命令提示符启动的,或者
  3. 安装程序是从 Inno Setup Studio 启动的

在所有其他情况下,PDF 将不会启动(并且在您终止 2 个 Adob​​e 进程之前,不会打开其他 PDF)。

这实际上是适用于 Windows 7 但不适用于 Windows 10 的代码:

ExtractTemporaryFile('test.pdf');
ShellExec('open',
  AddQuotes(ExpandConstant('{tmp}\test.pdf')), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);

【问题讨论】:

  • 以管理员身份运行时,可能没有为动词 open 注册的 shell 命令。您是否尝试只传递'' 而不是打开? (这也可以解释为什么 ShellExecAsOriginalUser 工作时 ShellExec 不工作 - 非管理员为 PDF 文件分配了打开动词操作。)较新的 Acrobat Reader 版本的默认值是 Read,而不是打开,使用空字符串会导致它使用默认动作。
  • 不走运,将'' 传递给ShellExec 具有相同的结果。不过,很高兴知道 read 是新的默认操作,谢谢。

标签: windows-10 inno-setup


【解决方案1】:

我怀疑权限正在发生某些事情,因为结果因安装程序的启动方式而异(例如,从已经提升的进程与启动后提升)。

使用ShellExecAsOriginalUser 有效。例如:

ExtractTemporaryFile('test.pdf');
ShellExecAsOriginalUser('open',
  AddQuotes(ExpandConstant('{tmp}\test.pdf')), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);

我不知道 ShellExec 在 Windows 10 上不能用于此目的,而 ShellExecAsOriginalUser 是一个错误或预期的功能。

【讨论】:

  • 无论如何,你应该从一开始就使用ShellExecAsOriginalUser。您不想以提升的权限运行任何应用程序,除非应用程序需要它。而 PDF 查看器则没有。
猜你喜欢
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 2011-11-29
  • 2011-01-28
  • 2011-09-22
  • 1970-01-01
  • 2011-12-09
相关资源
最近更新 更多