【发布时间】:2011-07-24 19:51:26
【问题描述】:
我们的应用程序是用 Delphi 编写的,它会生成一系列报告,其中大部分是 PDF 格式,生成时会自动打开。 Adobe X 引入了一项默认启用的功能“启动时启用保护模式”。 使用“ShelExecute”打开报告 pdf 文件。
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 之外什么都不做,它可以工作。我已经检查了应用程序的权限 - 都是一样的 - 唯一的区别是使用正确的安装程序在操作系统上安装了一个不工作的应用程序 - 我刚刚创建并把它放在那里的另一个(虚拟的)。
其中一个 cmets 询问文件关联 - 这应该不是问题,因为应用程序成功启动了 Adobe 阅读器 - Adobe 阅读器然后给我“拒绝访问”错误消息。双击同一个文件可以正常工作。
新信息 - 2011 年 3 月 30 日 - 下午 2:50 - 新西兰时间
我对代码进行了更改,只是为了测试应用程序本身和虚拟应用程序之间的唯一区别。 现在,它不是自动获取文件路径和文件名,而是打开一个 OpenDialog - opendialog 的 Filename 属性用作 ShellExecute 的参数(如 Ken 回答后的注释所述) - 它可以工作。为什么,当您从打开的对话框中获取文件名时,它可以工作 - 请注意,我没有从对话框中打开文件 - 我正在获取文件名,并将其用作 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
【问题讨论】:
-
打开此文档时出错。访问被拒绝。
-
能不能加上
ShelExecute这句你用来打开文件的语句? -
var pdfFile: string;开始 pdfFile := 'C:\Users\Ronaldo\Documents\appName\reports\file.pdf'; ShellExecute(0, 'open', PChar(pdfFile), '', '', SW_SHOW);
-
@Ronaldo 在 cmets 中,您可以通过将代码括在“反引号”符号中来格式化代码:`。例如
A := 1;在美式键盘上,后引号通常位于左上角,并在制表键上方加上波浪号 ~。 -
双击使用文件关联打开。它是如何成功的?它有什么不同?
标签: delphi windows-7 windows-vista adobe-reader