如果以管理员身份启动的应用程序运行,ShellExecute将失败

时间:2019-07-11 00:13:05

标签: c++ pdf windows-10 shellexecute adobe-reader

我的C ++应用程序使用ShellExecute打开PDF文件。我正在使用Windows 10 Enterprise LTSC(版本1809,操作系统内部版本17763.615)运行我的应用程序。如果我的应用程序以管理员身份启动(右键单击Run as administrator),则无法打开PDF文件。但是,如果我的应用程序没有管理员权限启动(只需双击它),则Adobe(默认的PDF阅读器)将成功启动,并且PDF会正确显示。

我的应用程序在Windows 7和Windows 10 Pro上正常运行(带有和不带有Run as admin)。现在,我们正尝试使用Windows 10 Enterprise LTSC,此问题才刚刚开始发生。

我的应用程序中的实际代码是:

ShellExecute(NULL, NULL, full_path.toWideCharPointer(), NULL, NULL, SW_SHOWDEFAULT);

其中full_path例如等于"C:\\Faxitron\\Docs\\Guide.pdf"

在两种情况下(无论是否使用管理员),ShellExecute始终返回42,而GetLastError返回0。这很有趣:在以Admin身份运行我的应用程序时,任务管理器显示{{{ 1}},但我的Adobe程序从未启动/打开。

不确定是否相关,但是我使用的是最新版本的Adobe Acrobat Reader DC(版本19.012.20034)。

最后,我的应用程序需要以Admin身份运行(其他功能才能正常运行)。以管理员身份运行应用程序时,有没有办法使Adobe Acrobat Reader DC (32 bit)正常工作?

1 个答案:

答案 0 :(得分:0)

在这种情况下,ShellExecute无法通过升高的过程启动PDF查看器的原因是因为Adobe Reader通过其保护模式阻止了它的运行。要解决此问题,请执行以下操作禁用保护模式:

  1. 打开Adobe Reader。
  2. 选择编辑>首选项...
  3. 在左侧的类别列表中,选择安全性(增强)。
  4. 沙盒保护部分中,取消选择 在启动时启用保护模式
  5. 点击确定以保存更改。
  6. 关闭Adobe Reader。

有关保护模式(以及可能存在的漏洞)的更多信息,请参阅Adobe.com上的以下链接: https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/protectedmode.html

相关问题