Installshield 学习心得体验

Administrative Priviledge, 将该项选择 “Yes”。这样设置之后,用户就可以有管理员的权限去安装该安装文件了,避免用户在安装的时候出现权限不够的问题。如图:
 
 更改“添加/删除程序”面板中软件的图标。
General Information -> Add or Remove Programs -> Display Icon
 设置”添加/删除程序”面板中软件可卸载。
General Information -> Add or Remove Programs -> Disable Change Button, Disable Remove Button, Disable Repair Button,这三个至少要有一个选为“NO”,全部设为“YES”的话,则在这个面板中,对应的软件没有“更改/删除”的按钮可以点击,即在这里就卸载不了软件了。那就得自己去注册表里胡搞乱改,把它搞掉了。  设置“软件名称”,“版本号”还有“安装路径”。
General Information -> Product Properties->NAME ,VERSION,INSTALLDIR  关于“Product Code”和“Upgrade Code”以及版本升级问题。
这两个关乎到版本升级问题,理论上,XP是不允许用户安装两个相同Product Code的同一个软件的,即时,每一个版本的安装包,都必须有新的Product Code。但其实,很多时候,我们在项目的时候,并不是每一次release都是一个新版本,因为有可能只是更改了一点点,不足以作为一个新版本,这是我们可以称为是一个小版本,比如,V1.0.0-》V1.0.1。我查了一下帮助文档,找到了”Chaning the Product Code”这篇文章,里面开头有这么一句:An update that meets the following guidelines generally does not require a change of the product code and can be handled as a small
update, or if the version is to change, as a minor upgrade。(详细请按F1,官方文档才是王道)
这句话的意思是,当update属于 small update 或者 minor upgrade的时候,就不用更改product code,这两者的区别在于,minor upgrade更改了 product version。除了这两个之外,剩下的一个就是major upgrade,生成这种安装包的时候,就需要更改product code 和 producr version。(还是不明白的请看官方帮助文档) 另外,还有个叫做 package code的东西,当你每次release一个新的安装包的时候,无论是上面哪一个,这个package code都会改变,这是IS给安装包自动重新生成的。不用用户区设置。这是作为每个release包的唯一区别。
总的来说:当你生成一个大版本,如V1.0.0->V2.0.0,这是就需要换Product Code了(方法:General Information -> Product Properties->Product Code, 选中它, 左下方有个Generate GUID的按钮,点击它就可以重新生成,记得与Media->Release->PROJECT_ASSISTANT中的Product Code保持一致,否则在卸载的时候会出现问题),否则就不用更改。     当小版本实现覆盖安装的时候,记得还要在Media->Upgrades->Update Windows Installer Setup中,common下选中prompt,这样,当你覆盖安装的时候,系统就会提示你是否要覆盖安装,否则则会提示你,已经安装了 某个Product Code 的产品,



 


不让覆盖安装。
 去掉安装界面还有卸载界面上面的”InstallShield Wizard”等字眼。
General Information -> String Tables
选中你采用的那个语言。在“Value”列中,将”InstallShield Wizard”这些字眼全部替换掉空格或者其它信息,自己决定。(注意:安装还有卸载的时候,进入的第一个界面还有最后退出的界面的”InstallShield Wizard”是去不掉的,因为去掉这些字眼本来就违反了IS的协议,你用别人的东西,肯定要标记一下别人公司的标志)  2. 点击 Organization
 设置Feature(组件)的安装类型
在制作简单的安装软件的过程中,已经提到过类型安装:Minimal,Custom,Typical . 选择 Setup Types, 你会发现无论点击这三个中的任何一个,DefaultFeature都是必选的。
3. 点击 Application Data
 如何添加我要打包的文件到工程中
选择Files and Folders,点击右边的***[INSTALLDIR]这个文件夹,然后在“Source compuoter’s floders”选中你要加入的文件夹,右边的“Source computer’s files”框栏中就显示这些文件,把这些直接拉到“Destination computer’s files”中。(注意:如果发现拉入的文件不对,想要删除,则不能在这里删除,而要到Organization->Components下把文件删除,这样才能删的彻底,否则会出错。另外,加入好文件后,全选这些文件,右击打开属性,选择”Always Overwrite”,这样可以强制覆盖安装。)
4. 点击 System Configuration
 如何建立桌面和开始程序的快捷方式
 
像上面图片一样,建完快捷方式后,记得把每个快捷方式的”Working Directory”设置为”[INSTALLDIR]”.否则会出错。
5. 点击 Behavior and Logic
 怎么定制安装和卸载过程出现的界面
点击Install Script, IS 的installscript在安装的时候首先调用的是OnFirstUIBefore 函数,卸载的时候首先调用的是 OnMaintUIBefore 函数,这两个函数都在 Before Move Data. 而在安装结束时调用的函数是 OnFirstUIAfter 函数,而卸载结束的时候调用的是 OnMaintUIAfter. 
 如何在卸载的时候不弹出“修改”“修复”“删除”的界面,直接进入删除
在OnMaintUIBefore函数中,从Dlg_Start到Dlg_SdFeatureTree之间的代码全部注释,



 


然后加上nType = REMOVEALL;
 如何除去安装和卸载过程中标题中的“InstallShield Wizard”字眼
安装和卸载过程中,第一个出现的界面和最后退出的界面标题的字眼是无法去除的,或者说我不知道怎么去吧,哈…其它界面上的标题可以通过:在OnFirstUIBefore中添加:SetTitle(“安装”+IFX_PRODUCT_NAME,0,BACKGROUNDCAPTION); 卸载也是一个道理,添加以上语句的函数是:OnMaintUIBefore
 怎么用脚本创建一个卸载快捷方式,如何“完美卸载”
IS自带的建立卸载快捷方式(Project A Assistant -> Application Shortcuts -> Create an uninstallation shortcut)是有问题的,会出现卸载不完全的现象。解决方法是写脚本: Install Script -> After More Data -> OnFirstUIAfter 中添加: STRING szFile; NUMBER nResult; 
szFile = UNINSTALL_STRING + “/UNINSTALL”; nResult = StrFind(szFile,”.exe”); 
if(nResult >= 0) then
StrSub(szMsg1, szFile, 0, nResult + 4); StrSub(szMsg2, szFile, nResult + 4, 200); 
LongPathToQuote(szMsg1, FALSE); LongPathToQuote(szMsg2, FALSE); 
szFile = “\” + szMsg1 + “\” + szMsg2;
        endif;      AddFolderIcon(FOLDER_PROGRAMS ^ “AliProbe”, “Uninstall AliProbe”, szFile, WINDIR, WINDIR ^ “System32\\msiexec.exe”, 0, REPLACE);       然后在OnMaintUIAfter()中添加:    // 删除开始所有程序中的AliProbe文件夹   DeleteProgramFolder(“AliProbe”);      // 删除桌面上的快捷方式   STRING szItemName = “AliProbe”;   STRING szProgramFolder = FOLDER_DESKTOP;   DeleteFolderIcon(szProgramFolder, szItemName);      // 删除安装目录文件夹   DeleteProgramFolder(TARGETDIR);   
 向注册表写入安装路径
 



 


prototype AliprobeReg(); //声明函数 function AliprobeReg()    number nRootKey,nType,nSize;
string szKey,szNumName,szNumValue,szClass; begin        //修改注册表
  nRootKey = HKEY_LOCAL_MACHINE;
  RegDBSetDefaultRoot (nRootKey);     //置根为nRootKey    //注册子项
 
szKey="SOFTWARE\\Aliprobe\\";
  if RegDBKeyExist(szKey) < 0 then    //不存在“SOFTWARE\\Aliprobe”,创建这个项
     RegDBCreateKeyEx(szKey,"");   endif;
  //初始化每个键的公共值   nType=REGDB_STRING;  
nSize=-1;
  //注册安装路径   szNumName="PATH";   szNumValue=TARGETDIR;
    RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize); end; 
在OnInstallFilesActionAfter()中调用上面的函数。  安装结束后启动进程和readme文件
在OnFirstUIAfter()中添加:
szMsg1 = "AliProbe已经安装完成";     szMsg2 = "";  bOpt1  = TRUE;  bOpt2  = TRUE;
 szOption1 = "打开readme文件";
// szOption2 = "启动Aliprobe";       szOption2 = "";
 nResult = SdFinish(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2);     
 if(bOpt1) then    
     if(FindFile(TARGETDIR, "readme.txt", szFile) = 0) then       LaunchApp(WINDIR^"Notepad.exe", TARGETDIR^"readme.txt");      endif;     endif;     
    if(bOpt2) then
     if(FindFile(TARGETDIR, "AliProbe.exe", szFile) = 0) then       LaunchApp(TARGETDIR^"AliProbe.exe", "");



 


     endif;           endif;  
6. 点击 Media
 对于小版本,提示覆盖安装
当小版本更新的时候,由于Product Code没有更改,所以,必须设置让它提示升级安装。选择Upgrades -> Upgrade Window Installer Setup ,选择Common ,勾上 prompt  如何更改安装包的名字,不要默认的Setup.exe
Release -> PROJECT_ASSISTANT 
 
修改Setup file name就可以了。另外,Product Name 和 Product Version 也要做相应的修改,Product Code 和 Upgrade Code 要保持和 General Information -> Product Properties的Product Code 和 Upgrade Code 要保持一致,否则会出现卸载失败。
五.其它细节注意。
1. Cannot rename directory 或 Error Code = -1014
关闭工程release的目标文件夹,即**/**/../Disk,这个文件夹,此时很有可能因为它开着而导致错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值