您的当前位置:首页正文

InstallShield_2010_打包实例

来源:九壹网


下面我们一步一步来建立一个基本的工程,并且使用脚本来完善和丰富所需功能

第一部分:基本设置

1. 打开Installshield 2010 Premier Edition,新建一个Installscript MSI Project,这种被称之为半脚本程序,因为兼具Basic Project基本类型和Installscript Project全脚本类型两者的优点,我比较喜欢用。像我这样需求的,既要用到Wizard的便利,又想写一点脚本来实现一点自定义操作的,就比较适合用这种类型啦。

选择类型为Windows Installer | InstallScript MSI Projcet,输入工程名,指定工程所在的文件夹。

2. 界面会切换到Project Assistant,我们先从这里开始把工程的基本组件和基本文件建立好。

3. 在Project Assistant界面的底部,会有一个引导动作条,在建立该工程的基本结构和文件时,我们都将在此界面进行操作,下文都将以“引导条”来指代这个引导动作条。

4. 点击引导条上的Application Information

这里输入:

公司名,公司名将会出现在Setup.exe的注解中

软件名,将会出现在安装过程的左上角标题栏上

版本号,没看到在哪,不过自己比较方便地知道自己在编译哪个版本的软件

公司网址,没看到在哪,而且如果该公司没有网址呢?而且这里有点bug,好像默认的值总是会报一个String_ID1为空的错误,自己输入一个网址就不会报错。

是否在你创建了更新时自动通知最终用户,没用过,我都选了No。

选择一个图标,这个图标会出现在“添加或删除程序”里,我一般用默认的,当然你可以替换成自己想要的图标。

5. 点击引导条上的Installation Requirement

这里选择对操作系统和一些软件的需求。根据自己需要来选择是否要求操作系统的版

本,已经是否要求安装了某些软件。

需要选中Windows Installer 3.1(x86) 和Mirosoft .NET Framework 3.5:

6. 点击引导条上的Installation Architecture

这是个十分有用的设置,对于本文所用的分布式软件来说非常合适,分布式软件的每个组件可以设置为一个Feature,用户可以自由选择安装某些功能。

将选项Do you want to customize your Installation选择为Yes。

点击选中根节点Installation Architecture,点击New创建新的Feature,可以为每个Feature指定新名称。

还可以在Feature下创建子Feature,比如如果文档Feature下包括软件本身文档,和软件所需的运行环境的文档,那么可以创建两个子Feature,分别包含两种文档,用户在安装时就可以选择安装部分或者全部文档了。这里我们没有用到子Feature,用途和普通Feature一样。

这里,建立好所有Feature后,我们将切换到Installation Designer做一个设置

找到Installation Designer页面上左边导航树Organization | Features分支,你会看到这里Features都显示为原始的名称,而非我们改过的名字,因为Feature有Name和Display Name两种名称,我们刚才改的不过是Display Name,为了便于查看和使用,我们在这里把Name也改一下

注意Name不可以有空格,可以使用下划线

7. 点击引导条上的Application Files

我们将在这里对安装路径进行微调,并且为每个Feature指定需要安装的文件

这里我不想使用Program Files | Company Name | Product Name这个路径,我想使用Program Files | Product Name,我直接点击选中My Product Name[INSTALLDIR]拖动到ProgramFileFolder下,还可以直接将My Product Name 改成自己想要的文件夹名字

接下来,为每个Feature指定要安装的文件。

打开这个下拉列表,所有的Feature都在这里,按顺序来给每一个Feature建立文件夹,并且导入所需的文件。

选择第一个Feature, 即Server,点击My Product Name[INSTALLDIR]节点,右键点击,在菜单上选择New Folder来创建一个文件夹。

创建一个Server文件夹,这个文件夹将用来存放该组件需要的一些文件。

再在Server文件夹下创建一个icon文件夹,存放该组件所用的图标。

然后为该Feature添加安装时该Feature要安装的文件。

这里我们建立的icon文件夹是用来存放这个feature在后面要建立快捷方式时使用的

图标的。为这个icon文件夹添加相应的图标文件,并且记住图标文件的来源文件夹,后面设置快捷方式的时候要用。

点击选中要添加文件的文件夹,然后点击右下角的Add Files,然后添加文件

接下来我们为Feature添加文件夹,如果这个文件夹中的全部文件都为这个Feature所需。添加文件夹的好处在于只要文件夹位置和名称不变,那么文件夹里面的文件都是动态加载的,有多少加载多少,不用考虑文件名的改动带来的影响。

点击选中要添加文件夹的文件夹,然后点击右下角的Add Folders,然后添加文件夹。

选中文件夹,点击确定。

会询问你是否要使用动态文件链接,我都选择确定,好处就在于我刚才上面所述。

显示了源文件夹,如果这个文件夹下有子文件夹,并且也需要一并添加进来的话,务必钩选Include subfolders选项。

这里还允许做一些简单设置来包含或者排除一些特定文件,支持通配符。

点击OK确定加入文件夹。

如法炮制为每个Feature建立文件夹,并且添加文件,最后效果如图所示

Document这个Feature,除了文件所用的图标外,什么都不要添加,后面我们将用安装时实时拷贝的方式来拷贝文档进来。

8. 接下来我们为可执行文件创建快捷方式。

点击引导条上的Application Shortcuts

点击New新建一个快捷方式

选择一个要建立快捷方式的Feature。

如果要建立快捷方式的程序为非.exe形式,请把Files Of选择选为All Files(*.*)格式。

我们的程序安装目标路径设置在Program Files下,因此双击[ProgramFilesFolder]打开,层层点击进入。

我们这里要为client.bat建立一个快捷方式,因为这个是启动用的批处理文件。

Installshield可以自动监测到.exe文件的存在,自动生成快捷方式,用户只需要做一些适当修改即可。

新建的快捷方式将出现在这里,名字不好听,样子也不好看,我们将为它改一个名字,并且换一个图标。

选中快捷方式,点击Rename,并且为这个快捷方式改一个适当的名字。

注意右边的几个选项。

Create shortcut in Start Menu,将在开始菜单里创建一个快捷方式。

Create shortcut on Desktop,将在桌面上创建一个快捷方式。

Use alternate shortcut Icon,替换快捷方式的图标

Associate a file extension with the shortcut’s target,没用过,不知道什么意思。

我们在这里将只创建开始菜单的快捷方式,因此钩选第一项。

钩选第三项,并且点击Browse来浏览图标。

请回想刚才在为Feature添加文件的时候,每个feature都添加了对应的icon。这里,请把浏览的文件夹设定为刚才添加icons所用的文件夹,通俗的说,就是你刚才从哪儿添加一个图标进feature的,现在还是从哪儿添加的这个图标。

其实这一点我是一直很费解的,当初不知道要这么选择图标,随便从外面一个任意文件夹里添加了一个图标,以至于打包后死活找不到图标,后来经过试验才知道这个被选中的图标文件要拷贝进来,打包进安装文件才可以。这一点上不能不提一下visual studio,这个工具做安装程序虽然功能一般,但是思想还是不错的,当它的组件指定拷贝了图标文件后,在建立快捷方式时,快捷方式使用的图标是指向虚拟的安装目标路径下的图标文件的,而不是指定到这个实实在在的源文件夹。这一点差别就体现出了思想上的差异。

如法炮制为每个Feature指定快捷方式,Document除外,因为我们在这个feature里除了图标文件外什么都没有添加。

至此我们为每个可执行程序添加了开始菜单下的快捷方式。

我们再切换去Installation Designer,找到System Configuration | Shortcuts。

看到快捷方式在开始菜单中是以 公司名 | 软件名 | 快捷方式 这种形式存在的。事实上我是不喜欢这种形式了,想想点开一层还有一层,不如直接了当来得干脆,因此做一些修改。

这里我改成了如下设置

不要告诉我你不会改,直接拖动Test文件夹往Program Menu(即开始菜单下的那个“所有程序”)下一塞即可,然后删除掉多余的Company Name文件夹。

9. 可能刚才在Project Assistant界面有人已经注意到了左边栏上More Options下Create an uninstallation shortcut这个诱人的字样了。

可是我要告诉你,如果你选择了这种方式建立卸载快捷方式的话,你会很沮丧地发现:

a) 似乎只有在安装某个feature的时候这个卸载快捷方式才会出现(当然,就是那个default feature,这种要命的feature形式决定了每个文件或者快捷方式都必须明确地归属到某个feature下),因此,当你的客户只选择了其他feature安装时,这个卸载方式不会出现,而他必须去“添加或卸载程序”里面去卸载

b) 如果你写脚本使得安装时会拷贝一些外部文件进来,那么这些文件在这种卸载方式下是删除不掉的。(如果你确实想保存这些文件,你可以在脚本里设置它们属性为permanent,这个属性可以保证什么卸载方式都不能删除你的这些文件)。

所以这里我们忽视这个卸载快捷方式的存在,而将在后面采用脚本形式实现完美卸载。

10. 点击引导条上的Application Registry

向注册表写键和键值,由于本工程不需要,忽略之。有需要的朋友可以查阅相关资料,不难。

11. 点击引导条上的Installation Location

这个是用来设置安装包的语言的,选择了多个语言后,用户可以在安装界面开始的时候选择安装时所用的语言;不过作为一个公司产品来说,这么偷懒,客户的印象是要打折扣的,所以还是选个单语言吧,该什么语言的安装包就什么语言的安装包,各归各。

不过你又会沮丧地发现,如果要选择一种其他语言作为Default Language,好像又报错了。

这个问题当时折腾了我一个星期(当然那时候才接触Installshield,还一窍不通),最后问了技术支持才得以解决。

切换去Installation Designer,找到Installation Information | General Information,看到String Tables下面是什么?对,所有你选的语言都列出来了,选中你要的语言,右键,选择Make Default,OK,再切换回Project Assistant去把所有不要的语言统统去掉钩选即可。

看到此处,已经变成了English为默认语言了。

12. 点击引导条上的Build Installation。

打包安装盘的设置,本人从来不用这个选项,都用工具条上的Release Wizard。

至此,第一部分基本完成。如果是一些没有特别要求的安装包,这部分讲解的内容足够可以做一个基本的安装包了

第二部分:脚本编程

下面就是我的脚本的主要实现:

脚步主要包括六个部分,即六个事件处理过程:OnBegin,OnEnd,OnFirstUIAfter,OnFirstUIBefore,OnMainUIAfter,OnUninstall这六个事件都是自动生成的,需要那些特殊的处理就这写事件里面写脚步就可以了。onEnd和OnUninstall两个事件我没有用到,很奇怪的,卸载代码写在OnUninstall里面没有启作用,没有运行,所以我不得不写在OnMainUIAfter事件里面。另外需要提示的是unistall shield自带的卸载快捷方式不好用,卸载不完全,所以必须写脚步才能卸载完全。

下面就是我做的具体的脚本:

1:开始部分:

//===========================================================================

//

// File Name: Setup.rul

//

// Description: Blank setup main script file

//

// Comments: Blank setup is an empty setup project. If you want to

// e

create a new project via. step-by step instructions use th

// Project Assistant.

//

//===========================================================================

// Included header files ----------------------------------------------------

#include \"ifx.h\"

// Note: In order to have your InstallScript function executed as a custom

// action by the Windows Installer, it must be prototyped as an

// entry-point function.

// The keyword export identifies MyFunction() as an entry-point function.

// The argument it accepts must be a handle to the Installer database.

/* export prototype MyFunction(HWND); */

function OnBegin()

begin

Disable (BACKBUTTON);

//if(!MAINTENANCE)then

//SdLicense2 (\"License \\"\\"\SUPPORTDIR ^ \"许可协议.rtf\FALSE);

//endif;

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

if (RegDBKeyExist(\"SOFTWARE\\\\ORACLE\")<0) then

MessageBox(\"请先安装Oracle\

Exit;

endif;

end;

2OnFirstUIBefore事件部分:

//---------------------------------------------------------------------------

// OnFirstUIBefore

//

// The OnFirstUIBefore event is called by the framework when the setup is

// running in first install mode. By default this event displays UI allowing

// the end user to specify installation parameters.

//---------------------------------------------------------------------------

function OnFirstUIBefore()

NUMBER nResult, nSetupType, nvSize, nUser;

STRING szTitle, szMsg, szQuestion, svName, svCompany, szFile;

STRING szLicenseFile;

LIST list, listStartCopy;

BOOL bCustom, bIgnore1, bIgnore2;

STRING szDir,szTemp;

begin

// TO DO: if you want to enable background, window title, and caption bar title

// SetTitle( @PRODUCT_NAME, 24, WHITE );

// SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION );

// Enable( FULLWINDOWMODE );

// Enable( BACKGROUND );

// SetColor(BACKGROUND,RGB (0, 128, 128));

// Added in InstallShield 15 - Show an appropriate error message if

// -removeonly is specified and the product is not installed.

if( REMOVEONLY ) then

Disable( DIALOGCACHE );

szMsg = SdLoadString( IDS_IFX_ERROR_PRODUCT_NOT_INSTALLED_UNINST );

SdSubstituteProductInfo( szMsg );

MessageBox( szMsg, SEVERE );

abort;

endif;

nSetupType = TYPICAL;

Dlg_SdWelcome:

szTitle = \"欢迎使用UWAY-OMD GB优化系统\";

szMsg = \"安装软件将在您的计算机中安装 'UWAY-OMD GB优化系统' 若要继续,请单击下一步\";

nResult = SdWelcome(szTitle, szMsg);

if (nResult = BACK) goto Dlg_SdWelcome;

szTitle = \"\";

svName = \"\";

svCompany = \"\";

Dlg_SdRegisterUser:

szMsg = \"请您填写用户信息\";

szTitle = \"欢迎您\\b\\n使用UWAY-OMD GB优化系统\";

nResult = SdRegisterUser( szTitle, szMsg, svName, svCompany );

if (nResult = BACK) goto Dlg_SdWelcome;

Dlg_SetupType:

szTitle = \"安装类型\\b\\n请选择安装类型\";

szMsg = \"请选择安装\";

nResult = SetupType2(szTitle, szMsg, \"\nSetupType, 0);

if (nResult = BACK) then

goto Dlg_SdRegisterUser;

else

nSetupType = nResult;

if (nSetupType != CUSTOM) then

nvSize = 0;

FeatureCompareSizeRequired(MEDIA, INSTALLDIR, nvSize);

if (nvSize != 0) then

MessageBox(szSdStr_NotEnoughSpace, WARNING);

goto Dlg_SetupType;

endif;

bCustom = FALSE;

goto Dlg_SQL;

else

bCustom = TRUE;

endif;

endif;

Dlg_SdAskDestPath:

nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0);

if (nResult = BACK) goto Dlg_SetupType;

Dlg_SdFeatureTree:

szTitle = \"\";

szMsg = \"\";

if (nSetupType = CUSTOM) then

nResult = SdFeatureTree(szTitle, szMsg, INSTALLDIR, if (nResult = BACK) goto Dlg_SdAskDestPath;

endif;

Dlg_SQL:

nResult = OnSQLLogin( nResult );

if( nResult = BACK ) then

if (!bCustom) then

goto Dlg_SetupType;

2);

\"\

else

goto Dlg_SdFeatureTree;

endif;

endif;

Dlg_SdStartCopy:

szTitle = \"可以安装UWAY-OMD GB优化系统了\\b\\n安装准备工作已就绪,可以开始安装了。\";

szMsg =\"\";// \"单击\"安装\"以开始安装。\\b\\n如果要检查或更改任何安装设置,请单击\"上一步\"。单击\"取消\"退出安装向导。\";

nResult = SdStartCopy2( szTitle, szMsg );

if (nResult = BACK) then

goto Dlg_SQL;;

endif;

listStartCopy = ListCreate( STRINGLIST );

switch (nSetupType)

case TYPICAL : ListAddString(listStartCopy,\"Setup Type: 典型\

case COMPACT: ListAddString(listStartCopy,\"Setup Type: 压缩\

case CUSTOM: ListAddString(listStartCopy,\"Setup Type: 自定义\

endswitch;

ListAddString(listStartCopy,\" \

ListDestroy(listStartCopy);

// Added in IS 2009 - Set appropriate StatusEx static text.

SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_FIRSTUI ) );

// setup default status

Enable(STATUSEX);

return 0;

end;

3: OnFirstUIAfter事件部分

//---------------------------------------------------------------------------

// OnFirstUIAfter

//

// The OnFirstUIAfter event called by the framework after the file transfer

// of the setup when the setup is running in first install mode. By default

// this event displays UI that informs the end user that the setup has been

// completed successfully.

//---------------------------------------------------------------------------

function OnFirstUIAfter()

STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;

BOOL bOpt1, bOpt2;

STRING szSrcFile1;

STRING szSrcFile2;

STRING szTarFolder1;

STRING szTarFolder2;

STRING szOption1;

STRING szOption2;

STRING szExeFile;

STRING szDocFile;

NUMBER nResult;

STRING szfilename,szFolder ,szmsg1,szmsg2;

NUMBER nresult;

STRING svStartDir;

NUMBER nSize,nRet;

STRING szFeatureName1 ;

STRING szFeatureName2 ;

STRING szFeatureName3 ;

STRING szFeatureName4 ;

STRING szDir1;

STRING szDir2;

begin

Disable(STATUSEX);

szFeatureName1 =\"DB_TS\";

szFeatureName2 =\"DB_TD\";

szFeatureName3 =\"MAP\";

szFeatureName4 =\"vcredist_x86\";

nSize=MAX_PATH;

MsiGetProperty ( ISMSI_HANDLE , \"StartDir\" , svStartDir , nSize);

szDir1 = TARGETDIR;

if (0 = ExistsDir(szDir1)) then

StrSub(szDir2,szDir1,0,StrLength(szDir1)-1);

endif ;

if (FeatureIsItemSelected(MEDIA, szFeatureName1)=1) then

XCopyFile (svStartDir^\"ConfigFiles\\\\CreateDbTableSpace.bat\" , szDir2 , COMP_NORMAL );

XCopyFile (svStartDir^\"ConfigFiles\\\\db_TableSpace.sql\" , szDir2,

COMP_NORMAL );

LaunchAppAndWait ( TARGETDIR^\"CreateDbTableSpace.bat\" ,

\"\" ,LAAW_OPTION_WAIT );

DeleteFile (TARGETDIR^\"CreateDbTableSpace.bat\");

DeleteFile (TARGETDIR^\"db_TableSpace.sql\");

endif;

if (FeatureIsItemSelected(MEDIA, szFeatureName2)=1) then

XCopyFile (svStartDir^\"ConfigFiles\\\\DmpTableData.bat\" , szDir2 , COMP_NORMAL );

XCopyFile (svStartDir^\"ConfigFiles\\\\omd.dmp\" , szDir2 , COMP_NORMAL );

XCopyFile (svStartDir^\"ConfigFiles\\\\dbImpUser.bat\" , szDir2 , CO

MP_NORMAL );

LaunchAppAndWait ( TARGETDIR^\"DmpTableData.bat\" , \"\" ,LAAW_OPTION_WAIT );

DeleteFile (TARGETDIR^\"DmpTableData.bat\");

DeleteFile (TARGETDIR^\"omd.dmp\");

DeleteFile (TARGETDIR^\"dbImpUser.bat\");

endif;

if (FeatureIsItemSelected(MEDIA, szFeatureName3)=1) then

if (RegDBKeyExist (\"SOFTWARE\\\\MapInfo\\\\MapXtreme\\\\6.8.0\") < 0) then

LaunchAppAndWait (svStartDir^\"ConfigFiles\\\\MapInfo\\\\map

xtremeTRIAL.exe\" , \"\" ,LAAW_OPTION_WAIT );

XCopyFile (svStartDir^\"ConfigFiles\\\\MapInfo\\\\mapxtreme680.li

c\" , \"C:\\\\Program Files\\\\Common Files\\\\MapInfo\\\\MapXtreme\\\\6.8.0\" , COMP_NORMAL );

DeleteFile ( INSTALLDIR^\"ConfigFiles\\\\MapInfo\\\\mapxtreme680.lic\" );

endif;

endif;

if (FeatureIsItemSelected(MEDIA, szFeatureName4)=1) then

LaunchAppAndWait ( svStartDir^\"ConfigFiles\\\\vcredist_x86.exe\" , \"\" ,LAAW_OPTION_WAIT );

endif;

szfilename = UNINSTALL_STRING +\" /UNINSTALL\";

nresult = StrFind(szfilename,\".exe\");

if nresult >=0 then

StrSub(szmsg1,szfilename,0,nresult + 4);

StrSub(szmsg2,szfilename,nresult + 4,200);

LongPathToQuote(szmsg1, FALSE );

LongPathToQuote(szmsg2, FALSE );

szfilename = \"\\\"\" + szmsg1 + \"\\\"\" +szmsg2;

endif;

AddFolderIcon(FOLDER_PROGRAMS^\"uway\\\\OMD\e,WINDIR,\"\

bOpt1 = FALSE;

bOpt2 = FALSE;

if ( BATCH_INSTALL ) then

SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );

else

SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );

endif;

end;

4: OnMaintUIAfter()事件部分:

function OnMaintUIAfter()

STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2,szDirectory1,szDirectory2;

NUMBER bOpt1, bOpt2;

begin

Disable(STATUSEX);

if( REMOVEALLMODE ) then

szTitle = SdLoadString(IFX_SDFINISH_REMOVE_TITLE);

szMsg1 = SdLoadString(IFX_SDFINISH_REMOVE_MSG1);

szTitle=\"卸载完毕\";

szMsg1=\"已完全卸载UWAY-OMD GB优化系统\";

//删除该程序文件

/* szDirectory1 = TARGETDIR;

if (0 = ExistsDir(szDirectory1)) then

StrSub(szDirectory2,szDirectory1,0,StrLength(szDirectory1)-1);

DeleteDir (szDirectory2,ALLCONTENTS);

endif ; */

szDirectory1 = TARGETDIR;

if (0 = ExistsDir(szDirectory1)) then

StrSub(szDirectory2,szDirectory1,0,StrLength(szDirectory1)-1);

DeleteDir (TARGETDIR^\"CardAlarm\

DeleteDir (TARGETDIR^\"GPP\

DeleteDir (TARGETDIR^\"images\

DeleteDir (TARGETDIR^\"interfaceassoc\

DeleteDir (TARGETDIR^\"me_main\

DeleteDir (TARGETDIR^\"zh-chs\

DeleteFile (TARGETDIR^\"DevExpress.Data.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.Utils.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraGrid.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraLayout.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraEditors.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraBars.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraSpellChecker.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraSpellChecker.v9.1.Core.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraScheduler.v9.1.Extensions.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraScheduler.v9.1.dll\");

DeleteFile (TARGETDIR^\"DevExpress.XtraScheduler.v9.1.Core.dll\");

DeleteFile (TARGETDIR^\"OMD_WirelssOptimize.exe\");

DeleteFile (TARGETDIR^\"OMD_WirelssOptimize.exe.config\");

DeleteFile (TARGETDIR^\"System.Core.dll\");

DeleteFile (TARGETDIR^\"VerifyDll.dll\");

DeleteFile (TARGETDIR^\"zccfg.ini\");

DeleteFile (TARGETDIR^\"omd.log\");

DeleteFile (TARGETDIR^\"License.dat\");

endif ;

// 在桌面上删除快捷方式

DeleteFolderIcon (FOLDER_DESKTOP, \"OMD\");

//删除程序中的快捷方式

DeleteFolderIcon(FOLDER_PROGRAMS^\"uway\\\\OMD\

else

szTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);

szMsg1 = SdLoadString(IFX_SDFINISH_MAINT_MSG1);

endif;

bOpt1 = FALSE;

bOpt2 = FALSE;

szMsg2 =\"谢谢您使用UWAY-OMD GB优化系统。\";

if ( BATCH_INSTALL ) then

SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );

else

SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );

endif;

end;

因篇幅问题不能全部显示,请点此查看更多更全内容