Adobe X Включить защищенный режим при запуске - отключить с помощью кода

Наше приложение, написанное на Delphi, генерирует серию отчетов, в основном в формате PDF, которые автоматически открываются при создании. Adobe X представила функцию, которая по умолчанию включена «Включить защищенный режим при запуске». PDF-файлы отчетов открываются с помощью «ShelExecute».

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

Из-за этой новой настройки Adobe Reader под Win 7 или Vista мы получаем сообщение об ошибке при открытии документа. Двойной щелчок по документу, чтобы открыть его, не вызывает никаких проблем. Есть ли способ отключить защищенный метод или другой способ открыть документ без получения ошибки (обходной путь)?

* Дополнительная информация *

Файл PDF создается в нашем серверном приложении , передается клиенту, и клиент генерирует PDF-файл (используя запись) - сначала я подумал, что это может быть проблемой - но опять же, почему двойной щелчок работает нормально.

Я создал фиктивное приложение, которое ничего не делает, кроме использования тот же код выше, чтобы открыть PDF-файл, и он работает. Я проверил привилегии приложения - все равно - единственная разница в том, что тот, который не работает, устанавливается в ОС с помощью подходящего установщика - другой (фиктивный) я только что создал и сбросил туда.

В одном из комментариев спрашивается об ассоциации файлов - это не должно быть проблемой, поскольку приложение успешно запускает Adobe Reader. Затем Adobe Reader выдает мне сообщение об ошибке «Доступ запрещен». Двойной щелчок по тому же файлу работает нормально.

Новая информация - 30.03.2011 - 14:50 - по новозеландскому времени

Я внес изменения в код, чтобы проверить единственное различие между приложением само и фиктивное приложение. Вместо автоматического получения пути к файлу и имени файла теперь он открывает OpenDialog - свойство Filename в opendialog используется в качестве параметра для ShellExecute (как указано в комментарии после ответа Кена) - это работает. Почему, когда вы получаете имя файла из открытого диалогового окна, оно работает - обратите внимание, что я не открываю файл из диалогового окна - я получаю имя файла и использую его в качестве параметра для ShellExecute.

Обновленный пример кода

Когда пользователь нажимает кнопку «сгенерировать отчет», отчет открывается автоматически после его создания. Кроме того, есть сетка, показывающая все сгенерированные на данный момент отчеты для этого пользователя - это код при двойном щелчке по этой сетке:

if GetSelectedReport <> nil then // this will check if the user selected an report
  if TReportItemState(GetSelectedReport.State)  in [risGenerated,risViewed] then // checks if the report selected is in the correct state to be displayed.
  begin
    fileName := TClientReportManager.Singleton.Directory+'\'+GetSelectedReport.Filename; // a string with the filePath + fileName
    ShellExecute(0, 'open', pchar(fileName), '','', SW_MAXIMIZE); // command to open the file
  end;

Мое первое предположение при работе Opendialog заключается в том, что, открытый диалог изменяет CurrentDir - поэтому я уже пробовал SetCurrentDir и ChDir, чтобы изменить текущий каталог на тот, где находятся файлы. Безуспешно.

В Win 7 путь к файлу преобразуется в C: \ Users \ Ronaldo \ Documents \ CompanyName \ AppName

6
задан CharlesB 17 July 2012 в 05:58
поделиться