Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 10 如何在Windows 10上使用Inno设置打开PDF?_Windows 10_Inno Setup - Fatal编程技术网

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

Windows 10 如何在Windows 10上使用Inno设置打开PDF?,windows-10,inno-setup,Windows 10,Inno Setup,如何在Windows 10上从Inno安装程序打开PDF?我正在尝试显示帮助文档,而我使用的()技术以及适用于Windows 7的技术在Windows 10上运行时不会导致任何问题(文件不会打开,并且不会报告错误消息) 具体来说,当尝试在需要提升权限的安装程序中打开PDF时(在使用ShellExec()在自定义代码部分安装之前,或在使用ShellExec标志在[Run]部分安装之后),它将生成2个Adobe进程,但不会打开任何窗口(此外,在手动终止这些进程之前,无法打开其他PDF)。但是,如果:

如何在Windows 10上从Inno安装程序打开PDF?我正在尝试显示帮助文档,而我使用的()技术以及适用于Windows 7的技术在Windows 10上运行时不会导致任何问题(文件不会打开,并且不会报告错误消息)

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

  • 另一个PDF已经打开
  • 安装程序是从已提升的命令提示符启动的,或
  • 安装程序已从Inno Setup Studio中删除
  • 在所有其他情况下,PDF将不会启动(并且在您杀死2个Adobe进程之前,不会打开其他PDF)

    这基本上是在Windows 7上工作而不是在Windows 10上工作的代码:

    ExtractTemporaryFile('test.pdf');
    ShellExec('打开',
    AddQuotes(ExpandConstant({tmp}\test.pdf'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
    
    我怀疑特权有问题,因为根据安装程序的启动方式(例如,从已提升的进程到启动后提升),结果会有所不同

    使用
    ShellExecAsOriginalUser
    工作。例如:

    ExtractTemporaryFile('test.pdf');
    ShellExecutaOriginalUser('打开',
    AddQuotes(ExpandConstant({tmp}\test.pdf'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
    

    我不知道这是否是一个bug或预期的功能,
    ShellExec
    在Windows 10上不起作用,而
    ShellExecAsOriginalUser
    起作用。

    在以管理员身份运行时,可能没有为动词open注册shell命令。您是否只是尝试传递
    '
    ?(这也解释了为什么
    ShellExecAsOriginalUser
    ShellExec
    不工作时工作-非管理员为PDF文件分配了打开动词操作。)较新Acrobat Reader版本的默认操作是读取,而不是打开,使用空字符串将导致它使用默认操作。运气不好,将
    '
    传递到
    ShellExec
    会得到相同的结果。不过,很高兴知道读取是新的默认操作,谢谢。您应该使用
    ShellExecaOriginalUser
    fr从一开始,你就不想运行任何具有提升权限的应用程序,除非应用程序需要它。PDF viewer也不需要。