InstallShield如何做Excel安装与否的检测

  • 传统的方法

  一般都会从注册表入手,检测注册表中是否存在某项来判断是否安装了Office,还可以通过注册表信息来判断安装的具体版本。

  • 存在的问题

  由于系统的不同、注册表的损坏、安装包的不同等等原因,读取注册表的方法显得不靠谱了。

  • 最后的方法

  当注册表检测的结果是没有安装后,再来创建一个Excel实例,如果创建成功了,那么说明安装过。

  有人会问,为什么不一开始就直接创建实例,我的回答是创建Excel实例比较耗内存,注册表有效的情况下检测够用了。

  • 最后贴上代码
//---------------------------------------------------------------------------
// DoesExcelExist
// 判断是否安装了Excel
//---------------------------------------------------------------------------
function BOOL DoesExcelExist()
BOOL bResult;
begin 
REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY; 
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);	
if(RegDBKeyExist("SOFTWARE\\Wow6432Node\\Microsoft\\Office\\Excel")<0 ) then
_out("64 system does not have Excel, now check 32 system.");
if(RegDBKeyExist("SOFTWARE\\Microsoft\\Office\\Excel")<0 ) then
_out("32 system does not have Excel too, Now check is could create Excel object."); 
if(!CreateExcelObject())then
_out("So this system does not have Excel, return false.");
bResult = FALSE;
else
_out("So this system have Excel, return true.");
bResult = TRUE;
endif; 
else 
_out("32 system have Excel, return.");
bResult = TRUE;
endif; 
else 
_out("64 system have Excel, return.");
bResult = TRUE;
endif; 
REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
return bResult;
end;

//---------------------------------------------------------------------------
// CreateExcelObject
// 创建Excel实例
// 通过成功与否来判断是否安装了Excel
//---------------------------------------------------------------------------
function BOOL CreateExcelObject()	
OBJECT excelObj; 
begin 
set excelObj = CreateObject("Excel.Application");//创建一个Excel对象 
if (IsObject(excelObj) = FALSE ) then
_out("Create Excel object failed.");
set excelObj = NOTHING;
return FALSE;
endif; 
_out("Create Excel object successe.");
set excelObj = NOTHING;
return TRUE;
end;

 

posted @ 2015-04-13 21:29  狂神314  阅读(289)  评论(0编辑  收藏  举报