我的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)
正常工作?
答案 0 :(得分:0)
在这种情况下,ShellExecute
无法通过升高的过程启动PDF查看器的原因是因为Adobe Reader通过其保护模式阻止了它的运行。要解决此问题,请执行以下操作禁用保护模式:
有关保护模式(以及可能存在的漏洞)的更多信息,请参阅Adobe.com上的以下链接: https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/protectedmode.html