Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обход защиты Adobe Reader X для открытия PDF из Delphi-приложения

Delphi , ОС и Железо , Windows

В последнее время Adobe Reader X обзавёлся новой функцией, которая включается по умолчанию – "Enable Protected Mode at Startup". Эта функция предназначена для защиты от вредоносного ПО, которое может использовать ассоциации файлов PDF для своих целей. Однако, для приложений, использующих ассоциации файлов для автоматического открытия PDF, это может стать проблемой.

В нашем случае, приложение, написанное на Delphi, генерирует отчёты в формате PDF, которые должны открываться автоматически сразу после создания. Для этого используется функция ShellExecute. Однако, начиная с Windows 7 и Vista, при попытке открыть документы с помощью этой функции, пользователи сталкиваются с ошибкой доступа.

Пример кода для открытия PDF:

var
  pdfFile: string;
begin
  pdfFile := 'C:\Users\Ronaldo\Documents\appName\reports\file.pdf';
  ShellExecute(0, 'open', PChar(pdfFile), '', '', SW_SHOW);
end;

Возможные решения:

  1. Изменение параметров в ShellExecute: Попробуйте изменить параметры вызова ShellExecute, передав nil в качестве второго параметра, что позволит использовать действие по умолчанию. Также можно установить параметры после пути к файлу в nil, что упрощает код, и использовать SW_NORMAL вместо SW_SHOW для соответствия пользовательским предпочтениям.

  2. Исследование реестра Windows: Изучите реестр для определения команд, используемых для открытия PDF-файлов. Возможно, потребуется добавить дополнительные параметры в команду, вызывающую Adobe Reader.

Подтверждённый ответ:

Пользователь обнаружил, что проблема связана с использованием переменной окружения USERPROFILE для определения пути к папке с отчётами. В Windows 7 UAC не позволяет явно указывать путь к "Моим документам", поэтому было решено использовать функцию SHGetFolderPath для получения пути к личным папкам пользователя, используя параметр CSIDL_Personal.

Пример функции GetSpecialFolderPath:

function GetSpecialFolderPath(folder : integer) : string;
const
  SHGFP_TYPE_CURRENT = 0;
var
  path: array [0..MAX_PATH] of char;
begin
  if SUCCEEDED(SHGetFolderPath(0, folder, 0, SHGFP_TYPE_CURRENT, @path[0])) then
    Result := path
  else
    Result := '';
end;

Вызов функции:

GetSpecialFolderPath(CSIDL_Personal);

Использование этой функции позволило обойти защиту Adobe Reader X и открыть PDF-файлы из Delphi-приложения без ошибок доступа.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с проблемой открытия PDF-файлов из Delphi-приложения из-за новой функции защиты Adobe Reader X и пытается найти решение, изменяя параметры вызова `ShellExecute` или реестра Windows, и находит рабочий вариант с использо


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:44:18/0.0034310817718506/0