使用 activeX 控件 "AcroPDF.dll" 我的应用程序工作正常,但如果未安装 adobe acrobat,则在启动时崩溃

Using the activeX Control "AcroPDF.dll" my application works fine, but crashes on startup if adobe acrobat is not installed

我有一个向PDF文件添加文本的应用程序,我有一个axAcroPDF1预览面板,它借用了acrobat来显示PDF文件的状态,但是对于程序的功能来说并不是必需的,所以我想让程序仍然启动,即使没有安装 acrobat,尽管功能更有限 ,然后用户将不会有预览面板,这很好。我该怎么做?

我唯一想尝试的是在程序启动时初始化 this.axAcroPDF1 时添加 catch/exception,这允许我弹出一个消息弹出窗口,提示需要 Adob​​e reader,但此后程序仍然崩溃,所以无论如何我都想让程序启动,只是在没有安装 adobe 时不要调用它,或者你们有任何其他建议,这样这个应用程序在有或没有 adobe 的情况下仍然可以正常运行.

我知道如何检查是否安装了 adobe,但我不知道如何将结果应用到我的程序中。

初始化时的 catch 异常给出了以下错误(我是菜鸟所以这里可能没有提供好的信息):


System.Runtime.InteropServices.COMException (0x80040154): Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
   at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
   at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
   at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
   at System.Windows.Forms.AxHost.CreateInstance()
   at System.Windows.Forms.AxHost.GetOcxCreate()
   at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
   at System.Windows.Forms.AxHost.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ContainerControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

解决方案:我决定使用 Inno Installer,因为我有一些 DLL 文件,在安装程序脚本中,我进行了 adobe 检查,如果他们没有 adobe 或正确的版本,我会提示用户下载 reader。这是检查 adobe 的基本代码:

    [Code]







 procedure ExitProcess(exitCode:integer);
  external 'ExitProcess@kernel32.dll stdcall'; 

function GetAcrobatReaderVersion(): String;
var
  sVersion:  String;
begin
  sVersion := '';
  RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe',
     '', sVersion );
  GetVersionNumbersString( sVersion , sVersion );
  Result := sVersion;


end;

function GetAcrobatVersion(): String;
var
  sVersion2: String;
begin


    sVersion2 := '';
  RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Acrobat.exe',
     '', sVersion2 );
  GetVersionNumbersString( sVersion2 , sVersion2 );
  Result := sVersion2;
end;



function NextButtonClick(CurPage: Integer): Boolean;
begin



  // by default go to next page
  Result := true;

  if CurPage = wpWelcome then
  begin

    if Length( GetAcrobatReaderVersion + GetAcrobatVersion() ) = 0 then
    begin
      MsgBox( 'adobe not detected',  mbInformation, MB_OK );

      Result := false;
      ExitProcess(0);//adobe isn't installed, so exit installer
    end

    else
      //MsgBox( 'Acrobat reader installed is version ' + GetAcrobatReaderVersion() ,
      MsgBox( 'adobe detected',  mbInformation, MB_OK );


     end;
  end;