如何在 Windows 10 上使用 Inno Setup 打开 PDF?

How to open a PDF with Inno Setup on Windows 10?

如何从 Windows 10 上的 Inno Setup 安装程序打开 PDF?我正在尝试显示帮助文档,而我使用 (based on comments on this question) 并且适用于 Windows 7 的技术在 运行 on Windows 10 时没有任何反应(文件打不开,也没有报错信息。

具体来说,当尝试打开 PDF 时(在使用 ShellExec() 在自定义代码部分安装之前或在使用 shellexec 标志在 [Run] 部分安装之后)安装程序需要提升的权限,它将产生 2 个 Adob​​e 进程,但不会打开 windows(此外,在手动终止这些进程之前,无法打开其他 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);

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

使用 ShellExecAsOriginalUser 有效。例如:

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

我不知道 ShellExec 在 Windows 10 和 ShellExecAsOriginalUser 上无法用于此目的是错误还是预期功能。