ShellExecute завершается ошибкой, если запуск из приложения запущен с правами администратора - PullRequest
0 голосов
/ 11 июля 2019

Приложение C ++ использует ShellExecute для открытия файла PDF. Я использую Windows 10 Enterprise LTSC (версия 1809, сборка ОС 17763.615) для запуска моего приложения. Если мое приложение запускается с правами администратора (щелкните правой кнопкой мыши Run as administrator), оно не сможет открыть файл PDF. Однако, если мое приложение запускается без прав администратора (просто дважды щелкнув по нему), тогда Adobe (программа чтения PDF по умолчанию) запускается успешно, и PDF отображается правильно.

Мое приложение работает нормально (с * 1007 и без *) в Windows 7 и Windows 10 Pro. Эта проблема только началась, когда мы пытаемся использовать 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. Вот кое-что интересное: при запуске моего приложения в качестве администратора диспетчер задач показывает 2 процесса Adobe Acrobat Reader DC (32 bit) под моим приложением , но программа Adobe никогда не запускается / не открывается.

Не уверен, является ли это актуальным или нет, но я использую последнюю версию Adobe Acrobat Reader DC (версия 19.012.20034).

Наконец, мое приложение должно быть запущено с правами администратора (чтобы другие функции работали правильно). Есть ли способ заставить ShellExecute работать при запуске приложения от имени администратора?

1 Ответ

0 голосов
/ 11 июля 2019

Причина, по которой ShellExecute не может запустить средство просмотра PDF из процесса с повышенными правами *1003*, в данном случае заключается в том, что Adobe Reader предотвращает его через Защищенный режим . Чтобы решить эту проблему, отключите защищенный режим, выполнив следующие действия:

  1. Откройте Adobe Reader.
  2. Выберите Редактировать> Настройки ...
  3. В списке Категории слева выберите Безопасность (Улучшено).
  4. В разделе Защита песочницы , отменить выбор Включить защищенный режим при запуске
  5. Нажмите OK , чтобы сохранить изменения.
  6. Закрыть Adobe Reader.

Для получения дополнительной информации о Защищенном режиме (и возможных уязвимостях) перейдите по этой ссылке с Adobe.com: https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/protectedmode.html

...