发新话题
打印

[联盟原创]每日一贴(installshield)

12.18如何获得安装目标盘剩余空间:

//用prototype关键字声明函数
prototype CheckDiskSpace();  
//常量定义:其中#define是宏定义命令,它的作用是将TARGETDISK用DISK_DRIVE来代替;DISK_D RIVE称为宏名
#define DISK_DRIVE TARGETDISK
  
function CheckDiskSpace()

//变量申明
    STRING szDrive,svString;
    NUMBER nSpace,nResult;


begin

    szDrive=DISK_DRIVE;
    nSpace=GetDiskSpaceEx ( szDrive,MBYTES ); //使用GetDiskSpaceEx 函数获得目标盘剩余空间大小

    nResult=NumToStr(svString,nSpace);
    if(nResult<0) then
        MessageBox(" 从数字型转换到字符型时发生错误.",SEVERE);
        abort;
    endif;

    SprintfBox(INFORMATION,"磁盘可用空间",szDr ive+"盘可用空间:%s MB",svString);
  

end;

小知识:可以在script编辑界面按下Ctrl+I键打开函数向导对话框。
             函数的函数体由begin和end之间的若干条语句组成,用于实现这个函数执行的动作。"函数名"必须 和声明时的函数相同,"形参"应与声明时的形参类型一一对应,但"形参名"可以任意的有效InstallScript标识符。如 果需要在函数中使用其他变量,则这些变量应在begin前进行定义。
             函数名要是一个有效的InstallScript标识符(注意命名规则),函数名后面必须跟一对圆括号 "( )",以区别于变量名及其他用户定义的标识名。函数的形式参数写在括号内,参数表中参数个数可以是0,表示没有参数,但圆括号不 能省略,也可以是一个或多个参数,但多个参数间要用逗号分隔。
           使用GetDiskSpaceEx 函数获得目标盘剩余空间的准确大小,而GetDiskSpace函数只能返回小于2G的剩余空间。
           TARGETDISK-installshield的系统变量:包含了安装目标盘符的名称。会随TARGETDIR(包含了安装 程序在硬盘上的目标文件夹的完整路径)的改变自动更新。

TOP

12.20在非Web Project工程中,如何用简单的方法实现安装时IIS的检测(适用于ISX,10.5,11,11.5):

新建一个Web Project,切换到Installation Designer->System search处,在右边的列表中右击,选择publish Wizard(发布向导),按向导提示进行发布。

相关图片如下:
按此在新窗口浏览图片切换到Installscript msi或basic msi工程中在Installation Designer->System search处,在右边的列表中右击选择Add predefined search...,在此可以看到之前发布的System search
相关图片如下:
按此在新窗口浏览图片

相关图片如下:
按此在新窗口浏览图片

这时你转到Project Assistant页面->Install Requirment处就可以看到你加的东东了,接下来怎么做就不用说了吧:)……
按此在新窗口浏览图片

代码实现:

function OnBegin()
begin
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
SetDialogTitle (DLG_ASK_YESNO, "确认安装");
if (RegDBKeyExist ("System\\CurrentControlSet\\Services\\IISADMIN" ) < 0)
then
  if(AskYesNo("本机尚未安装Internet信息服务,是否继续安装?",YES)=NO )
  then
   abort;  
  endif;
endif;
//检测是否安装了WEB服务
if (RegDBKeyExist ("System\\CurrentControlSet\\Services\\W3SVC\\Parameters" ) < 0)
then
  if(AskYesNo("未检测到本机存在WEB服务,是否继续安装?",YES)=NO)
  then
   abort;  
  endif;
endif;  
//检测是否安装了ftp服务
if(RegDBKeyExist ("System\\CurrentControlSet\\Services\\MSFTPSVC\\Parameters" ) < 0)
then
  if(AskYesNo("未检测到本机存在FTP服务,是否继续安装?",YES)=NO)
  then
   abort;    
  endif;
else
  return(1);
endif;
end;

这样做还是不太准确。有的没装也有iisadmin键值。

TOP

12.21运行其他安装程序:
    可以在主安装程序下运行其他的安装程序。在选择的每个子安装程序都运行完毕后 ,主安装程序才会结束运行。有两种方法可以实
现这一功能:
    1.调用Dolnstall
    启动由InstallShield生成的安装程序的较好的办法是如下调用Do Install函数:
   (1)为要启动的子安装程序建立一个完整的安装工程;所有由InstallShield生成的文件
对子安装程序的正常运行都是必需的。
    (2)在已启动的主安装工程中,把所有为子安装程序生成的文件放在Setup Files面板
下适当的surportfiles文件夹中。
     提示:给子安装程序的setup.inx一个区别于setup.inx的文件名。
   (3)在父安装脚本调用DoInstall函数。
    例如:
      DoInstall (SUPPORTDIR^"child.inx", "", WAIT);
     提示:要调用DoInstall运行安装程序,必须保证主安装程序与子安装程序由相同版本的Installshield生成,否 则会调用失败。
    2.调用LaunchAppAndWait
    还可以通过调用LaunchApp或LaunchAppAndWait函数运 行一个完整的安装程序。例如,
如果把子安装程序的文件放在了Setup Files面板下,就必须如下调用LaunchAppAndWait函数:
      LaunchAppAndWait(SUPPORT DIR^"testsetup.exe","",WAIT);
    如果子安装程序的文件放在了CD-ROM下.就必须作如下调用:
      LaunchAppAndWait(SRCDISK ^"YouAppFolder\\Setup.exe","",WAIT);
    此外,也可以将子安装程序的文件链接到你的文件组中,将文件安装到目标系统上 ,再
从目标位置运行安装程序。当然,这会把安装文件留在目标系统上直至主安装程序被卸载。
      LaunchAppAndWait(TARGETD IR^"YouAppFolder\\Setup.exe","",WAIT);
      提示:LaunchApp(TARGETDIR^" YouAppFolder\\Setup.exe","");相当于LaunchAppAndWait(TARGETDIR^" YouAppFolder\\Setup.exe","",NOWAIT);

附:调用MSI实例
//用prototype关键字声明函数
prototype RunMsi();    
function RunMsi()
string szCommand,szCmdLine;
begin
   szCommand = WINSYSDIR^"msiexec.exe";  
   LongPathToShortPath(szCommand);
   szCmdLine =TARGETDIR^"msxmlchs.msi";
   LongPathToShortPath(szCmdLine);
   SdShowMsg("正在安装msxml,请稍候...",TRUE);
   Delay(5);
   if (LaunchAppAndWait( szCommand ,"/i"+szCmdLine,WAIT) < 0) then
      MessageBox("数据文件出现错误",WA RNING);      
   endif;

TOP

支持一下迷糊版主,然后我现在不用这个,或许以后用上了就要感谢迷湖了

TOP

目前很多测试人员同时要做安装包程序,迷糊可算了这方面的专家了,大学一起学习
蒹葭采采,白露未已.所谓伊人,在水之涘
溯洄从之,道阻且右;溯游从之,宛在水中

TOP

12.30创建internet快捷方式:

实现方法:随便建一个快捷方式:修改刚刚添加的快捷方式的属性,主要修改Target和Arguments两项。将Target 的内容改为[ProgramFilesFolder]Internet Explorer\IEXPLORE.EXE,即将快捷方式指向IE,然后将Arguments修改为网址,不过在instal lscript可以直接建internet快捷方式了,不知为什么其他工程却无此功能。

呵呵,接下来不知写啥,今天群上有人提示怎么在安装时不显示当前正在复制的文件名,方法很简单,只用在Dlg_sdStart Copy对话框的reture 0;前加上以下语句:Disable(INDVFILESTATUS);//用于控制进度条左上当前安装文件显示与否;

另外不少网友对函数不太会用,或记不太清(包括我自已),其实可以在script编辑界面按下Ctrl+I键打开函数向导对话框 ,是不是很方便呀:)

TOP

顶一下,继续写啊.
学习,交流,互进。

TOP

发新话题
本功能由奇虎问答实现

相关主题

标题 作者 最后发表
[站外] 书法][每日一贴]-   [转帖] 云胜 2008-12-31
[站外] ICLBA沙龙英语每日一句   [转帖] silent 2008-12-31
[站外] 我不放弃爱的100个理由   [转帖] 773614840@qq.com(yy) 2008-12-30
[站外] 我的每日一贴:大盘分析和个股   [转帖] 大作手 2008-12-29
点击阅读更多关于的相关帖子  更多相关主题