如何用InstallShield 8.0制作Excel加载宏的安装程序

SCYANGYU 2003-10-15 01:46:18


我编写好了Excel加载宏,准备利用InstallShield 8.0安装程序。
我不知到如何获取用户的Office的安装目录,需要读取系统注册表吗?

那位给点建议!谢谢!
...全文
287 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SCYANGYU 2003-10-23
  • 打赏
  • 举报
回复
各位兄弟,问题已经解决!

我给出源代码:


///////////////////////////////////////////////////////////////////////////////
// EVENT: Installed event is sent just after files for the feature:
// \IF97 are transferred.
///////////////////////////////////////////////////////////////////////////////

export prototype IF97_Installed();

function IF97_Installed()
string szKey,szClass,szKeySub;
string szOfficeVer,szAddInPathPost,szOpenKeyPost,szValueName,IFCSWDir;
string AddInPath,szXLAFN,szCurKeyValue,szDstStr,svString;
number nFor,nCount,nOk;
number nvType,nvSize;
BOOL bBWStr;
begin
szXLAFN="IF97.xla";
//szDstStr="\""+AddInPath+"\\"+szXLAFN+"\"";
szDstStr="\""+INSTALLDIR+szXLAFN+"\"";

//更改基本键
RegDBSetDefaultRoot(HKEY_CURRENT_USER);

//循环3次,要同时适用于
//Excel 97 (8.0)
//Excel 2000 (9.0)
//Excel XP (2002) (10.0)
for nFor = 1 to 3
switch (nFor)
case 1: //Excel 97 (8.0)
szOfficeVer="8.0"; //Office的内部版本号
szAddInPathPost="\\Library\\"+IFCSWDir; //加插宏的路径
szOpenKeyPost="Microsoft Excel"; //自动安装的加插宏子键名
case 2: //Excel 2000 (9.0)
szOfficeVer="9.0";
szAddInPathPost="Library\\"+IFCSWDir;
szOpenKeyPost="Options";
case 3: //Excel XP (2002) (10.0)
szOfficeVer="10.0";
szAddInPathPost="Library\\"+IFCSWDir;
szOpenKeyPost="Options";
default:
endswitch;



//通过修改注册表来加载宏,在键名为
szKey="Software\\Microsoft\\Office\\"+szOfficeVer+"\\Excel\\Add-in Manager" ;
//设置加载宏名称
//RegDBSetKeyValueEx(szKey,AddInPath+"\\"+szXLAFN,REGDB_STRING,"",-1);
RegDBSetKeyValueEx(szKey,INSTALLDIR+szXLAFN,REGDB_STRING,"",-1);


//设定自动打开的加载宏
szKey="Software\\Microsoft\\Office\\"+szOfficeVer+"\\Excel\\"+szOpenKeyPost;
szValueName="OPEN";

//下一次从1开始
nCount=0;
bBWStr=TRUE;
//循环迭代,"OPEN" "OPEN1" "OPEN2" "OPEN3" .....
while (RegDBKeyExist(szValueName)=1)

//读出当前的OPEN键的值
nvType=REGDB_STRING;
nvSize=-1;
if (RegDBGetKeyValueEx ( szKey , szValueName,nvType,szCurKeyValue ,nvSize) < 0)
goto Yyend;

//抽取出文件名
ParsePath (szCurKeyValue,szCurKeyValue , FILENAME_ONLY);

if StrCompare ( szCurKeyValue , szXLAFN )= 0 then
//表示已经安装过
//bBWStr=FALSE;
goto Yyend;
else
//"OPEN" "OPEN1" "OPEN2" "OPEN3" .....
nCount=nCount+1;
NumToStr ( svString , nCount );
szValueName="OPEN"+svString;
endif;
endwhile;

Yyend:
if bBWStr then
RegDBSetKeyValueEx(szKey,szValueName,REGDB_STRING,szDstStr,-1);
endif;
endfor;

end;
SCYANGYU 2003-10-20
  • 打赏
  • 举报
回复
谢谢!
我试一试!

To jhj2002(sdk):

InstallShield 8.0中如何写脚本,主要是问如何个次序?
jhj2002 2003-10-19
  • 打赏
  • 举报
回复
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\
主键下 建立"open" 字符串 ,值为""C:\Program Files\Common files\App.xla""
注意在installshield下前后一定要加个引号,这是为加载宏的安装设置,app.xla为你的加载宏.11.0为2003版本,安装后启动excel就自动加载app.xla宏
excel的安装位置为HKEY_CLASSES_ROOT\Applications\EXCEL.EXE\shell\edit\command]
怎么读取,你自己看这办吧
eric_alex 2003-10-16
  • 打赏
  • 举报
回复
的确需要读注册表
klbt 2003-10-15
  • 打赏
  • 举报
回复
关注,帮你顶!

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧