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,这个文件夹,此时很有可能因为它开着而导致错误。
更改“添加/删除程序”面板中软件的图标。
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,这个文件夹,此时很有可能因为它开着而导致错误。