Delphi 使用Outlook ActiveX的最安全方法

Delphi 使用Outlook ActiveX的最安全方法,delphi,activex,delphi-xe2,Delphi,Activex,Delphi Xe2,在运行我的Delphi应用程序之后,我检查了已安装的MS Outlook版本,因为如果机器中的Outlook版本大于2007,则我的应用程序的工作方式不同 我还写了一个Outlook插件,它有时会崩溃。我怀疑 这些崩溃与我在启动时创建的Outlook实例有关 是否有一种方法可以以“更软的方式”创建这些ActiveX实例。当我现在创建OLE对象时,我在任务栏中看到一个图标,它的提示是“Outlook正在被另一个应用程序使用”,如果有可能删除它,我也会看到我的问题消失 不知何故,我想要实现的是相同的

在运行我的Delphi应用程序之后,我检查了已安装的MS Outlook版本,因为如果机器中的Outlook版本大于2007,则我的应用程序的工作方式不同

我还写了一个Outlook插件,它有时会崩溃。我怀疑 这些崩溃与我在启动时创建的Outlook实例有关

是否有一种方法可以以“更软的方式”创建这些ActiveX实例。当我现在创建OLE对象时,我在任务栏中看到一个图标,它的提示是“Outlook正在被另一个应用程序使用”,如果有可能删除它,我也会看到我的问题消失

不知何故,我想要实现的是相同的操作,其中
wdDoNotSaveChanges
参数允许“更平滑”地使用OLE对象

这是我用来检查Outlook版本的代码:

var
  OutlookApp: OLEVariant;
  Version : String;
begin
  { Create the OLE Object }
  Try
    OutlookApp := CreateOLEObject('Outlook.Application');
    Version := OutlookApp.version;
    OutlookVersion := StrToint(SubstrEx(1,Version,'.'));
    OutlookApp := VarNull;
  except
    on E: Exception do
    begin
      OutlookVersion := -1;
    end;
  End;

您的方法与Microsoft在此建议的方法不同:

他们的版本使用Microsoft Installer功能检测Outlook可执行文件的位置,然后直接从中提取文件版本。这种方法不会遇到像您这样实例化Outlook时可能遇到的任何问题。速度也快得多

不过,它确实存在一个主要缺点:它只有在正确部署Outlook的情况下才能工作,就像微软的方式一样。在消费类计算机上,这并不是什么大问题,但在企业环境中,您可能会(/将)偶尔遇到过于热心的IT部门进行的精简自定义安装,这些部门不包括必要的MSI占用空间

根据您的目标受众,这可能根本不是一个真正的问题