Installshield BasicMSI 问题集锦

来源:互联网 发布:电脑看本子软件 编辑:程序博客网 时间:2024/06/01 09:49

1、 问题描述:采用何种安装模式?

实现方法:如果对用户界面等自定义要求不高的话,建议用Basic Msi Project,否则用InstallScript MSI Project。

2、 问题描述:安装后快捷方式为乱码。

实现方法:将简体中文设为默认安装语言后删除English前的勾。操作步骤:在Installation Designer页面中Installation Information-General Information->String Tables右击Chinese(simplify)在弹出的快捷菜单中选择Make default,回到Project Assistant页面的相应处去掉English前的勾。

3、 问题描述:安装界面的中文全显示为乱码。

产生原因:之前已编译过英文的安装包。实现方法:在Bulid菜单中的Release Wizard中修改设置再重新编译即可。

4、 问题描述:如何修改系统默认的安装文件夹?

实现方法:在Information-Product Properties中INSTALLDIR右侧的文本框中单击,再单击文本框右侧的 ,在弹出的Set INSTALLDIR对话框中新建目标文件夹,点击OK后,再次点击 选择刚才建好的那个文件夹。点OK 即可将默认的安装目录修改。

5、 问题描述:怎么在开始程序中加上卸载的快捷方式。实现方法:在Project Assistant页面的Appication Shotcuts中单击左侧的Create an unlinstallation shotcut。

 6、 问题描述:安装时怎么使控件自注册。实现方法:在Project Assistant页面的中右侧选中控件,右击选择Properties在弹出的对话框中勾上Self Register复选框。

7、 问题描述:怎么实现在卸载时有的控件不被删除。实现方法:直接单击Installation Designer页面,选中Application Data下的Files and Folders,在Destination computer’s folders中选中不要被卸载的组件,右击选择Properties在弹出的对话框中勾上Permanent复选框(若没有复选框可以在organiztion处的setup design处设置 )

 8、 问题描述:怎么在Basic MSI Project安装工程中实现安装后运行指定的安装程序。实现方法:首先在Installation Designer页面的Behavior and Logic中单击InstallScript,右击Files在弹出的快捷菜单中选择New Script file,然后新建相关函数。例如: #include "ifx.h" export prototype RunSetIIS(HWND); function RunSetIIS(hMSI) STRING svResult; begin if(FindFile(INSTALLDIR,"设置IIS.exe",svResult)=0) then LaunchAppAndWait (INSTALLDIR^"设置IIS.exe","AUTORUN",WAIT); endif; end; 然后再在Behavior and Logic中单击Custom Actions, 右击Custom Actions在弹出的快捷菜单中选择Custom Action Wizard在Action Type中选择Run InstallScript code,在Insert into Sequence中的Install Execute Sequence处选择After ISSelRegisterFinalize或者After InstallFinalize都行,其余按向导提示操作。

9、 问题描述:怎么样在安装或卸载过程中停止或开启、重启有关服务。实现方法:大体操作同8。相关函数LaunchAppAndWait, 以停止win自带的web服务为例: #include "ifx.h" export prototype StopWebservice(HWND); function StopWebservice(hMSI) begin LaunchAppAndWait("","net stop w3svc"+"/S",WAIT); end;

10、问题描述:怎么样在卸载后删除残留文件。实现方法:大体操作同8。相关函数DeleteDir, DeleteFile,注意不要对INSTALLDIR文件夹进行整个删除,以防安装在根目录时这样的删除操作会造成删除整个盘符的所有数据。

11、问题描述:怎么样在安装完成之后创建新文件夹。实现方法:大体操作同8。相关函数CreateDir。 12、问题描述:怎么使安装包只一个exe文件。实现方法:在Bulid菜单中单击Release Wizard,在Media Type对话框处选择Network inage-在Release Configuartion对话框处选中Compress all files,在Windows Installer Location,Installscript Engine处选中Extract engine form Setup.exe,其余按向导提示操作。

 13、问题描述:安装时提示有的文件正在使用不能被覆盖,怎么解决。实现方法:单击Installation Designer页面,选中Application Data下的Files and Folders,在Destination computer’s folders处右击选中show compenents,再选中不要被覆盖的任意一个components,右击选择Properties在弹出的对话框中勾上Never Overwrite复选框。或是直接点击Organazation处的components处选择即可. 14、问题描述:怎么让用户选择安装路径。实现方法:在project Assistant中installationinterview 处,将第三行的yes选上。

15、问题描述:怎么修改对话框左侧和上部的logo图片。实现方法:在Project Assistant->Installation Interview:在右上角的More options处有个Use custom images on dialogs

16、问题描述:怎么在初始化安装过程时显示公司的logo作为闪屏。实现方法:在Installation Designer页面的Behavior and Logic->Support Files->Splash Screen处的Language Independent单击,在files列表处右键Insert files,选取一幅bmp图片添加就是。

17、问题描述:怎么使用脚本在安装过程中调用另一个MSI安装程序。实现方法:以下是函数片段 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; 18、问题描述:怎么设置背景图 实现方法:以下是函数片段 Enable( BACKGROUND ); GetExtents ( nvDx , nvDy); if(nvDx=800) then PlaceBitmap ( SUPPORTDIR ^ "bbrd1.bmp" , 1 , 800 , 600 ,CENTERED); elseif(nvDx=1024) then PlaceBitmap ( SUPPORTDIR ^ "bbrd2.bmp" , 1 ,1024 , 768 ,CENTERED); elseif(nvDx=1152) then PlaceBitmap ( SUPPORTDIR ^ "bbrd3.bmp" , 1 , 1152 , 864 ,CENTERED); endif;

 

18IDE中获取用户名和公司名写入指定ini文件

        InstallShield IDE中展开:System Configuration->INI File Changes右键点击新建一个INI文件,并添加keyworld(用脚本创建ini文件见第三点)。设置keyworld的属性Date Value,填入:“[COMPANYNAME]”即取得用户填写的公司名称,填入“[USERNAME]取得用户名(如填入123-456-789-001则写入一个字符串)。

  19用脚本实现把用户名和公司名写入ini文件

        InstallScript Project没有INI File Changes的视图,可以通过WriteProfString函数实现。WriteProfString ( szFileName, szSectionName, szKeyName, szValue );例如:WriteProfString ("C://Test.ini", "Windows", "KeyboardDelay", "100");获取用户信息脚本如下:
WriteProfString (EXAMPLE_INI, "", "user", svName);
WriteProfString (EXAMPLE_INI, "", "group", svCompany);