【发布时间】:2019-07-11 00:13:05
【问题描述】:
我的 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。这里有一些有趣的事情:当我以管理员身份运行我的应用程序时,任务管理器在我的应用程序下显示了两个 Adobe Acrobat Reader DC (32 bit) 进程,但 Adobe 程序从未启动/打开。
不确定这是否相关,但我使用的是最新版本的 Adobe Acrobat Reader DC(版本 19.012.20034)。
最后,我的应用程序需要以管理员身份运行(其他功能才能正常工作)。以管理员身份运行应用程序时,有没有办法让ShellExecute 工作?
【问题讨论】:
-
您是否尝试过使用参数 Guide.pdf 启动 Adobe.exe ?
-
ShellExecute 在第二个参数上,看来你可以提供
open命令,你试过吗?我知道当您使用NULL参数时,Windows 会在许多对象上回退,但您自己提供它们可能是值得的。 -
我尝试使用 PDF 作为参数启动
AcroRd32.exe(这显然是 Adobe 命令),但没有成功。使用open也不起作用。
标签: c++ pdf windows-10 shellexecute adobe-reader