InstallShield教程_第1页
InstallShield教程_第2页
InstallShield教程_第3页
InstallShield教程_第4页
InstallShield教程_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、In stallShield 使用本文使用的 InstallShiled 的版本是 InstallShiled2008 Premier Edition,只介绍 制作 BaseMSI Preject及 InstallScript MSI Preject 安装包。1菜单大多数菜单与其他软件一样,这里只介绍几个有特点的。1.1 Go可以通过此菜单到任意一个设计界面中。1.2 Project1.1.1 Perform StaticScan及Perform DynamicScan静态及动态搜索应用程序所需要的系统对象及Dll运行库,这两个功能有详细的向导,这里不再做介绍。1.1.2 SourceCont

2、rol此功能为源代码管理,必须结合 Microsoft的Microsoft Visual SourceSafe1.3 Tools1.3.1 In stallScriptStandard Dialog Sampler及 SkinnedDialog Sampler查看固定的安装 步骤界面,以便在脚本中调用。CabinetFile Viewer查看安装包CAB文件的内容,经测试好像不能 查看InstallShield2008制作的CAB的内容。2安装设计界面这里介绍的是Installation Designer页面的界面(介绍一些重要的属性)。2.1 In stallati on In format

3、io n2.1.1 Gen eralI nformatio n? Project PropertiesSetup Languages设置安装包的语言种类,一般默认的是简体 中文。? Add or Remove ProgramsDisplaylco n:在系统中的添加或删除程序的列表中显示的图标;Displaylcon Index:图标文件的图标索引;Disable ChangeButton:隐藏添加或删除程序的列表中的更改按 钮;Disable Remove Button:隐藏添加或删除程序的列表中的删除 按钮;? ProductPropertiesName:产品名称,显示在整个安装界面的产品

4、名称;INSTALLDIR安装的默认路径;? StringTables每种安装语言都有一个节点,安装中使用的字符串。2.2 Organization2.2.1 几个基本概念? Feature特征,每个Feature可包含子Feature及若干个Component,每 个Feature都会出现在Feature选择界面中,一旦 Feature被选 择安装其包含的Comp on e nt就会被安装到系统中去;? Component组件,每个Component可设置需要安装的文件、写入的注册表 信息、创建的快捷方式等等;? SetupType安装类型,一般默认有Minimal(压缩) Typical典

5、型)、Custom(自 定义 ),每种安装类型包含若干个 Feature。2.2.2 SetupDesign此界面可以设置Features、Components组件)及Files(安装文件)等 等。Setup Design节点的右键菜单,New Feature菜单新建一个Feature,右键点击 Feature节点,New Feature菜单新建一个子 Feature; New Component新建一个 Component; AssociateComponents菜单可 关联 Component。2.2.3 Features此界面可以设置 Feature 的属性。DisplayName:在F

6、eature选择界面中显示的名称;Description:在Feature选择界面中显示的描述;Removelnstallation :远程安装,Component中的此属性可覆盖Feature中的,一般默认选择 FavorLocal;Dest in atio n:安装路径;Display:显示方式,在Feature选择界面中显示的方式,一般默认选择 Visibleand Collapsed;Required:是否要求安装,选择 Yes此Feature 定会被安装;2.2.4 Components此界面可以设置Component的属性及管理Component项目。Dest in atio n:

7、安装路径;Destination Permissions设置文件夹权限(FNTS分区格式),点击右边小按钮可进入设置界面,在以后的例程中做详细介绍;Comp onent 子节点:? Files点添加安装程序需要安装的文件,添加文件分为静态添加和动态添加,静态添加只能添加文件,动态添加可以设置添加指定文件夹下的子文件夹及文件,本人喜欢使用动态添加方式;? RegistryData向注册表中添加键值;? Shortcuts添加快捷方式;? AdvancedSettings有九个子节点,我有些尚不知道含义,有些没有使用过,请高 手予以指教:Application Paths:未知;Assembly:

8、添加Assembly,没有使用过;COMRegistration:添加COM组件,没有使用过;File Types添加关联文件类型,没有使用过;Control NT Services控制系统服务,没有使用过;In stall NTServices安装系统服务,在以后的例程中做详细介绍;Publishi ng:未知;DeviceDriver: 未知;Other Data:查看 Direct Editor 数据。2.2.5 SetupTypes管理安装类型,在Properies栏设置Setup Type属性,在Features in stalled i nSetupType栏,选择此安装类型需安装

9、的 Feature。2.3 Application Data2.3.1 Filesand Folders管理安装文件夹及文件;2.3.2 Redistributables选择需要安装的系统运行库,有些系统运行库如Borla ndBDE在MSI安装包中没有,必须使用In stallScriptProject安装包;2.3.3 Mobile Devies管理移动设备,此功能没有使用过。2.4 System Configuration2.4.1 Shortcuts添加快捷方式;2.4.2 Registry向注册表中添加键值;2.4.3 ODBCResources添加ODBC数据源;2.4.4 INI

10、 FileChanges添加或更改 INI 文件,现在各系统已经很少使用 INI 文件,大多数 采用XML文件进行系统配置;2.4.5 EnvironmentVariables添加系统的环境变量;2.4.6 XMLFileChanges添加或更改XML文件。2.5 Server Configuration2.5.1 Internet Infosmation Services配置 IIS 网站及虚拟目录;2.5.2 Component Services 配置COM+应用程序和组件;2.5.3 SQLScripts配置数据库,只能配置MSSQLSERVER2.6 Behavior and Logi

11、c2.6.1 InstallScript 编写安装程序的脚本;2.6.2 Custom Actions and Sequences 编辑自定义动作;2.6.3 Support Files/Billboards 添加安装过程中需要的文件及安装背景;2.6.4 SystemSearch 系统条件检测,符合条件后才能安装;2.6.5 Property Manager 安装变量编辑器。2.7 User Interface2.7.1 Dialogs 编辑安装过程中使用的窗体。2.8 Media2.8.1 Path Variables编辑安装路径变量;2.8.2 Upgrades没有使用过;2.8.3 R

12、eleases 制作安装媒体;2.8.4 PatchDesign没有使用过。2.9 Additional Tools2.9.1 DependencyScanners搜索工具,有前面提到的Peform Static Sea n Perform Dy namic Sean及Import Visual Basic6.0 Project;2.9.2 Direct Editor 命令编辑器,在这里可以查看或编辑安装程序的各类信息。3 InstallScript 的事件在 InstallScriptMSIPreject 项目中可以根据需要编写脚本控制安装过程,下 面介绍几个重要的事件,事件分为三大类:Be

13、fore Move Data (安装数据前)、Move Data (安装数据过程中)、After Move Data(安装数据后)。3.1 Before Move Data3.1.1 OnFirstUIBefore 在第一次安装时, 在复制安装数据之前触发的事件, 更改这个事件 的脚本可自定义安装步骤。下面给出InstallShield自身的脚本:function OnFirstUIBefore()NUMBER nResult, nSetupType, nvSize, nUser;STRING szTitle, szMsg, szQuestion, svName, svCompany, szF

14、ile;STRING szLicenseFile;LIST list, listStartCopy;BOOL bCustom;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(BACKGR

15、OUND,RGB (0, 128, 128);SHELL_OBJECT_FOLDER = PRODUCT_NAME;nSetupType = TYPICAL;Dlg_SdWelcome:szTitle = ;szMsg = ;nResult = SdWelcome(szTitle, szMsg); if (nResult = BACK) goto Dlg_SdWelcome;szTitle = ;svName = ;svCompany = ;Dlg_SdCustomerInformation:nResult = SdCustomerInformation(szTitle, svName, sv

16、Company, nUser); if (nResult = BACK) goto Dlg_SdWelcome;Dlg_SetupType:szTitle = ;szMsg = ;nResult = SetupType(szTitle, szMsg, , nSetupType, 0);if (nResult = BACK) thengoto Dlg_SdCustomerInformation;else nSetupType = nResult;if (nSetupType != CUSTOM) then nvSize = 0; FeatureCompareSizeRequired(MEDIA,

17、 INSTALLDIR, nvSize); if (nvSize != 0) thenMessageBox(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_SdFeatureT

18、ree:szTitle = ; szMsg = ;if (nSetupType = CUSTOM) thennResult = SdFeatureTree(szTitle, szMsg, INSTALLDIR, , 2); if (nResult = BACK) goto Dlg_SdAskDestPath;endif;Dlg_SQL:nResult = OnSQLLogin( nResult );if( nResult = BACK ) then if (!bCustom) then goto Dlg_SetupType;elsegoto Dlg_SdFeatureTree;endif;en

19、dif;Dlg_SdStartCopy:szTitle = ;szMsg = ;listStartCopy = ListCreate( STRINGLIST );/The following is an example of how to add a string(svName) to a list(listStartCopy). /eg. ListAddString(listStartCopy,svName,AFTER);nResult = SdStartCopy( szTitle, szMsg, listStartCopy ); ListDestroy(listStartCopy);if

20、(nResult = BACK) thengoto Dlg_SQL;endif;/ setup default statusEnable(STATUSEX);return 0;end;从上面代码可以看出在没有安装类型界面时没有选择自定义安装 时安装程序不会进入安装路径选择界面, 这样用户不能自己选择安 装路径,在Dlg_SetupType标签节中做一些修改,使不论怎么样都 会进入安装路径选择界面,下面给出更改代码:Dlg_SetupType:szTitle = ;szMsg = ;nResult = SetupType(szTitle, szMsg, , nSetupType, 0);if (

21、nResult = BACK) thengoto Dlg_SdCustomerInformation;elsenSetupType = nResult;if (nSetupType != CUSTOM) thennvSize = 0;FeatureCompareSizeRequired(MEDIA, INSTALLDIR, nvSize);if (nvSize != 0) thenMessageBox(szSdStr_NotEnoughSpace, WARNING);goto Dlg_SetupType;endif;bCustom = FALSE;nResult = SdAskDestPath

22、(szTitle, szMsg, INSTALLDIR, 0);if (nResult = BACK) goto Dlg_SetupTypegoto Dlg_SQL;elsebCustom = TRUE;endif;endif;3.1.2 OnMaintUIBefore在修改或卸载时, 在复制安装数据之前触发的事件, 例如安装程序 在安装时添加了一个NT Service,在卸载时安装程序不会将将此服 务反安 装, 这时就需要在这个事件中 通过脚本 LaunchApp (APPLICATIONninstall 手工删除服务。3.1.3 OnSQLLoginMSSQLSERVE数据库安装登录函数,

23、In stallShield将此函数列出在 InstallScript中应该是便于用户自行修改此函数。3.2 Move Data这个类型当中的事件一般来说不需要改动。3.2.1 OnGeneratingMSIScript在 Action(动作)LauchConditions之前执行;3.2.2 OnGeneratedMSIScript在 Action(动作)LauchConditions之后执行;3.2.3 OnInstallFilesActionBefore在Action(动作)InstallFiles之前执行;3.2.4 OnInstallFilesActionAfter在Action(动

24、作)InstallFiles之后执行;3.2.5 OnMoving在 Action(动作)InstallInitialize 之后执行;3.2.6 OnMoved在 Action(动作)GeneratedMSIScript之前执行;3.3 After Move Data3.3.1 OnFirstUIAfter在第一次安装时, 在复制安装数据之后触发的事件, 例如有一个系 统需要将安装路径设置FTP虚拟目录,如果在安装数据之前就设置 的话,该路径不存在, 无法设置成功, 因此需要在这个事件中设置。3.3.2 OnMaintUIAfter 在修改或卸载时,在修改或卸载数据之后触发的事件;3.3.3

25、 OnEnd在安装完成之后触发的事件,即点击【完成】按钮后触发的事件, 例如用附加数据库方式创建数据库时可在此事件中进行。4 几个技术问题介绍4.1 数据库设置在安装程序中设置数据库,有两种方法:一种采用命令行附加数据库文件,一种是通过SQLScript脚本创建数据库,对于编写 SQLScript过于复 杂,或创建数据库时间过长时建议采用第一种方法。4.1.1 命令行附加数据库1. 将数据库文件(a_data.mdf 和 a_log.ldf)插入 Support Files 中;2. 定义变量:STRING psvSQLsvr, psvSQLusr, psvSQLpwd;BOOL bvWind

26、owsLogin;3. 定义 CreateDataBase函数:prototype CreateDataBase(STRING,STRING,STRING);4. 编写 CreateDataBase函数:function CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd)STRING szWaitTxt,szdatabase,path,path3;beginpath=TARGETDIRADataa_data.MDF; path3=TARGETDIRADataa_log.LDF;szWaitTxt= 正在创建数据库 ;SdShowMsg (szWaitTxt,

27、TRUE);Delay(3);CopyFile(SUPPORTDIRAa_data.MDF,path);CopyFile(SUPPORTDIRAa_log .L DF,path3);szdatabase = /U +svSQLusr+ /P +svSQLpwd+ /S +svSQLsvr+ /Q exec sp_attach_db Na , N+path+,N+path3+;if (LaunchAppAndWait(osql.exe, szdatabase,WAIT)1 V 31 laUICJ也 XML File Changes二 Q Server ConfigurationIn ternet

28、 Information Servi 匚 es塾 Component Services SQL Scripts-i 袒 Behavior and Logic InstallScript nl Custom Actions and Sequences jSupport Files/Billboards回n姬s翻i日:亡)User Interface DialogsMY COMPANYNAMENewPrqpsrtyl0NewPropertylO0NewPropertyll0NewPropertyl20NewPropertyl30NewPropertyl40NewProperty20NewPrope

29、rty30NewProperty40NewPropertyS0NewPropertyS0NewProperty703. 在OnFirstUIBefore事件中添加代码:Dlg_Userlnfo:szMsg = 请正确输入用户名称及公司名称,以便本系统显示的信息正确!nResult = SdRegisterUser(szTitle, szMsg, szUserInfo, szCompanyName); MsiSetProperty(ISMSI_HANDLE,MY_COMPANYNAME, szCompanyName); if (nResult = BACK) goto Dlg_SdLicense

30、;4. 在 Installation Designer中的 SQLScripts的 TextReplacement页面添加两个替换参数,如下图所示:GeneralScript |RuntimeDatabase ImportText ReplacementYou can list below a set of strings to replace in your script 衣 runtime, You should only replace text that you know is unique and wont cause any script syntax errors. Ins ta

31、ilshield will replace text listed below by the replacement value you specify Strinas to Reola匚包 in E匚riot at Runtime:Find WhatReplace With%INSTALL_DIR%INSTALLDIR%MY _COMPANY _NAME% MY COMPANY NAME一D曲怕| Edit4.2 InstallScirpt调用动态运行库中的函数安装过程中有些设置是InstallShield无法做到的,需要其他的编程软件 实现,其他的编程软件可以编写成可执行的应用程序(EXE

32、文件),通过LaunchApp和LaunchAppAndWait调用,也可以编写成动态运行库(DLL文件), InstallShield调用其中的函数,我使用的是 BorlandDelphi编程软件,我编写 了一个将安装文件夹设置为FTP虚拟目录的动态运行库,在In stallShield中 调用。Delphi的源代码如下:library FtpSetup;usesSysUtils, Classes, COMOBJ, Variants;$R *.resprocedure FtpSet(siteName, appPath: PCHAR);stdcall;varFTPSite, FTPServer

33、, FTPRoot, FTPVDir: Variant;newSiteName, newAppPath:string;beginnewSiteName:= siteName;newAppPath:= appPath;FTPSite := CreateOleObject(IISNamespace);FTPSite := FTPSite.GetObject(llsFtpService, localhost/MSFTPSVC);FTPServer := FTPSite.GetObject(IIsFtpServer, 1);FTPRoot := FTPServer.GetObject(IIsFtpVi

34、rtualDir, Root);FTPVDir := FTPRoot.Create(IIsFtpVirtualDir, newSiteName);FTPVDir.Path := newAppPath;FTPVDir.AccessRead := true;FTPVDir.AccessWrite := true;FTPVDir.SetInfo;FTPSite := Unassigned;FTPServer := Unassigned;FTPRoot := Unassigned;FTPVDir := Unassigned;end;exportsFtpSet;beginend.InstallScrip

35、t 脚本如下: 函数定义prototype stdcall FtpSetup.FtpSet (POINTER,POINTER);调用函数DLL_FILE= SUPPORTDIRNFtpSetup.dll;nResult = UseDLL (DLL_FILE);if (nResult = 0) thensvString1 = drawingfile;svString2 = TARGETDIRADrawingFilePath;psvString1 = &svString1;psvString2 = &svString2;FtpSet(psvString1,psvString2);UnUseDLL

36、(DLL_FILE);elseMessageBox(创建FTP服务失败,请手工设置。SEVERE); endif;值得注意的是函数的编写及调用都采用 stdcall 方式。4.3 自定义窗体4.3.1 BasicMSIProject 工程项目1. 创建自定义窗体,可参考标准窗体的各种设置,主要是窗体Behavior 的设置,下面以一个例子说明创建过程;2. 创建一个记录登录服务器的信息的自定义窗体, 该窗体需要录入服务器的IP地址、用户名及口令,将录入信息记录到XML文件 中;3. 如下图所示,在UserInteface的Dialogs的All Dialogs点击右键,选择 New Dialg

37、o 菜单,进入自定义窗体向导;圜 General innormationi 鱼 Update Notifications 画 TrialwareE 一j Organization J Setup Design FeaturesComponents DIM FLeferences- O Application Data j Files and Folders $ Kedstributables 為 Mobile DevicesS O System Configuration 尊 Shortcuts 諦 Registry 创 ODBC Reairtes _ 1M1 File 匚hanqes M E

38、nvTDnment Variables 固 XM_ File 匚hanges O Server Confiauration 晏 Internet Inftxmatian Services 费 Component Services SUL SQL ScriptsE _i Behavior and Logic S IretallScript i Custom Actons and Sequences .Support Files 0 System Searchr Property ManagerF o User Interface iP Dialogs 白己Media Path Variables

39、w-Q memesS匚I3 _I1 _ 田L 田L 田七 刃尸TVev Di al og. . aInsImp or t Dialog.Import Dialogs from Resource RJJ宜fo呂Export Dialogs io Resource Script-.-Export 11 Di al笳 toFilts ,jg wi 2GW 1 Fl” 口 DatabaseFolder +1 _ DestinationFolder 3 DiskSpaceRequirsments 3 FiesInUseInstallChangeFolder 1 B InstallWelcome i-td

40、 LicenseAciieement 田”tJ MaintenanceType S-Q MaintenanceWelcame S -Q MsRMFilesIrtJse l+l -td OutOfSpare +i _ PatchWelcCTine 3 ReadyToInstll 5 _ ReadyToRemove u SetupCompteteError 1 |_ SetupCompteteSuocess + td SetupError l-td Setupilnitiafczation +l-tj Setuplntenupted 田” _ SetupProyess 田” 口 SetupResu

41、ne fi SetupType 宙 SplashBitmapiindie! CTo learn more, viNewDialogl,如4. 选择Biank Dialog创建一个空白窗体,重命名ServerLogin;5. 如下图所示选择ServerLogin下的Chinse(Simplified节,可设计此窗体;曰曰Fl 匕 TKrcmss FCAIMW 卡曰 AmnChangeftjicler 口 AJrninHettmjMrttan田 口 Cdmcctelupi LJ C le tcmaiInfor t m 国 I_ CLEtcmSdL 田 |_| C LEbztrSdupT |ps F

42、F _ DatahauFddGr 电B DMTwttonFober 军 Ed OskSpaceRecMemnt? 巨 FfelriUM + 9 JrtS tdO MrtieFoltlw i 耳 IrEtdftWefccme 底 LJ Ljzc: jccmcn t S !_| MantcnancoTvpa 币 LJ Man tenancy Wat oms- Fl _J+ LJ CMtCfSpaoe T tJ PatchWefcome li B R&adyTafristal .+ 口 RwdyTdRjSnmrB fed LJ =cTwri_ocn O BchaxiorDoq三Pfapsff匚甲tE

43、GmnftentCutamPjkQittQF血ErrorFdsekwn266KgpMWlieiLeft50Left -SCiOtMTFabeF険TrueM汨呵ht-to3F険TopSJTrack Z ipxnF址TrueWritfi37斗Fl LJ ScrtupZompta toEr ror 币 L3 SetupConnpWSLCc: 尹 i=l SeWBux6. 添加三个TextArea,分别将Text属性更改为服务器IP:用户名: 及口令:,添加三个Edit Field,分别录入Property Name(属性名 称)为 MY_SERVER_IPMY_SERVER_USER my_serv

44、er_pw/d将口令的录入框的Password属性的值更改为True,添加三个PushButton,分别是上一步、下一步及取消,如下图所示:Instdlabon De创59日O険耶Themes白匚 Al Oaiog 3 AdmiiChangeFolder 匡 5 AdminNtworkLocetion ii 5 AdminWekame出 3 CancBlSetupB:戸 CuEtoTBrrfornratiDnQ Behviar 屮 Chrese (Simptfied)fi 戸 CustomSetipO Beharviar 屮 ChresE (Simpi-fed) tk 3 CiEtJonlSe

45、tuDTps 由 3 DatabaseFddErLL 口 DertratiDnFddErli O DtskSpKERequrerreritsli HlMEnLfee田 口 Inst-aithangeFdderIf _J Inst-aJkMelconieDfi _| Ucenseftgfeement E _I r-laritencrceTvpe 匝 _I h归mtEnarceWeltome 0 _| MsfiMH衣EnUseH _| OiWdace 两 _| PatchWekcunmH _I ReadyTaDistal 两 _I ReadyTaflemoveR lJ SetwerLogn O Q

46、BhaMar 出 Chhee (SmplifiEd) 两 二1 etuoConwteteError7. 如果想将此窗体插入 Customerlnformation窗体与SetupType之间,可选择 CustomerInformation 的 Behavior 的 Next 按钮,如下图所示,将 Event 的 NewDialog 的 Argument 更改为 ServerLogin窗体;IrEtdlatJDn DragncrB Ohd O Themes白 口 创1 Eogs审由FitJ 审 H-l口 Admin 匚 hFi 沪3 AdminNetworklocatcn :_| Admrij

47、fie电空心3 _J CustcrniErrInformationO felchaviar Chinese (Smpflfiedji f_I CutiQirnetijpQ Ehavkx出 chrwse Ompflfi&ciji 口 Cu5to*netupTqp5 H DatabassFoWer _I EicatriatianFcldDrCantroi Nann | lype Pufitl Button BitmapLhne PushButton Edit Tekt Tet Text Tekt Edit TetBackBannerDartierLineCartelCompanyEdrt Comp

48、anyLateiEgDesi:匸柏RadcOoupTDlaTrtfeNameEcktIMameLatei二二一-二二二页二二RadMnSup RacidEmSJ Se2L 日 be!TextSeNurntjerMask 已 cEcktE/enirlALLUSasJ ALLiJSER 幻EndDiolag Em ftServBrlcgfcn:nncWci 门 .qplcatio 占屮1匸昌打口 (EREALH8. 选择 ServerLogin 的 Behavior 的 Next 按钮,新增一个 NewDialog事件,将Argument更改为SetupType窗体,Condition更改为1,同

49、理在上一步按钮中添加返回CustomerInformation 窗体的事件,在取消按钮中添加 Eve nt为Spawi nDialog Argume nt为CancelSetup Condiiton 为 1,如下图所示:rt Instalahon Designer団 口1 ThemesCentral MarneT庐E U Al DiahgsEdrtlEdt由 口 Adnnchanaef olderErM2Edt由 jJrfietwrakljCKaljmEdit3Edt1 3 4drnWEtcfre了啟EPushBuftm由 口 CantE&eM:1PushButtonlPushButton自3

50、 Custom&rlnfaiTatmPu-hButtanSPush 日 utt onO BehaviorTextlTert$ Chr-ese Iampified)Tsit2Text向 _J Custom&eUpTeort3Tert吕 HDiatoos轻 1* 嘗曰 IL 1 电 inDi-stfl QeharflDTEvsntigunentLandrtonSetupType1內电咸 口u丈创口训HItq 嗣 Fww fvtnt, frst ddc n th *俺対 of 竝 ist- tNhf wkct N Fgger 阻hn thf tnd kf mnersds M Iha 肿暫乩 iwt,审(|內跖丫 R eeM 馆 th* evant-住 Behavior圧

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论