InstallShield_2010_打包实例.doc_第1页
InstallShield_2010_打包实例.doc_第2页
InstallShield_2010_打包实例.doc_第3页
InstallShield_2010_打包实例.doc_第4页
InstallShield_2010_打包实例.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第一部分:基本设置1新建Installscript MSI Project1引导动作条21. Application Information22. Installation Requirement33. Installation Architecture34. Application Files55. Application Shortcuts76. Application Registry97. Installation Location108. Build Installation11第二部分:XML文件修改11第三部分:自定义对话框16第四部分:安装windows服务18一、 脚本方式18二、视图配置方式21添加Install Service组件21添加Control Service组件24第五部分:脚本编程26Setup.rul文件头部27OnFirstUIBefore28OnFirstUIAfter31SetTomportInfo34完整脚本代码36第六部分:参考文章43I注:我使用的是Installshield 2010 Premier Edition,安装后自行汉化,所以有部分截图有中文;2010 SP1的官方下载地址:/product/is/2010/domestic/premier/installShield2010.exe第一部分:基本设置新建Installscript MSI Project打开Installshield 2010 Premier Edition,新建一个Installscript MSI Project,这种被称之为半脚本程序,因为兼具Basic Project基本类型和Installscript Project全脚本类型两者的优点。选择类型为Windows Installer | InstallScript MSI Projcet,输入工程名,指定工程所在的文件夹。界面会切换到Project Assistant,我们先从这里开始把工程的基本组件和基本文件建立好。引导动作条在Project Assistant界面的底部,会有一个引导动作条,在建立该工程的基本结构和文件时,我们都将在此界面进行操作,下文都将以“引导条”来指代这个引导动作条。1. Application Information这里输入:公司名,公司名将会出现在Setup.exe的注解中软件名,将会出现在安装过程的左上角标题栏上版本号,软件版本公司网址,必填选择一个图标,这个图标会出现在“添加或删除程序”里,一般用默认的,当然可以替换成自己想要的图标。2. Installation Requirement这里选择对操作系统和一些软件的需求。根据自己需要来选择是否要求操作系统的版本,以及是否要求安装了某些软件。3. 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不可以有空格,可以使用下划线。4. Application Files 我们将在这里对安装路径进行微调,并且为每个Feature指定需要安装的文件 。这里不想使用Program Files | Company Name | Product Name这个路径,想使用Program Files | Product Name,直接点击选中My Product NameINSTALLDIR拖动到ProgramFileFolder下,还可以直接将My Product Name 改成自己想要的文件夹名字,这里改为CKMH。接下来,为每个Feature指定要安装的文件。打开下拉列表,所有的Feature都在这里,按顺序来给每一个Feature建立文件夹,并且导入所需的文件。选择一个Feature, 即ckmh,点击CKMH INSTALLDIR节点,右键点击,在菜单上选择New Folder来创建一个文件夹。创建一个tomcat7文件夹,依次创建文件夹及子文件夹,然后为该Feature添加安装时该Feature要安装的文件。点击选中要添加文件的文件夹,然后点击右下角的Add Files,然后添加文件 。接下来为Feature添加文件夹,如果这个文件夹中的全部文件都为这个Feature所需。添加文件夹的好处在于只要文件夹位置和名称不变,那么文件夹里面的文件都是动态加载的,有多少加载多少,不用考虑文件名的改动带来的影响。点击选中要添加文件夹的文件夹,然后点击右下角的Add Folders,然后添加文件夹。选中文件夹,点击确定。会询问你是否要使用动态文件链接,选择确定,好处就在于刚才上面所述。显示了源文件夹,如果这个文件夹下有子文件夹,并且也需要一并添加进来的话,务必钩选Include subfolders选项。这里还允许做一些简单设置来包含或者排除一些特定文件,支持通配符。点击OK确定加入文件夹。如法炮制为每个Feature建立文件夹,并且添加文件。5. Application Shortcuts 接下来为可执行文件创建快捷方式。点击New新建一个快捷方式 选择一个要建立快捷方式的Feature。 如果要建立快捷方式的程序为非.exe形式,请把Files Of选择选为All Files(*.*)格式。 程序安装目标路径设置在Program Files下,因此双击ProgramFilesFolder打开,层层点击进入。 这里要为startup.bat建立一个快捷方式。选中快捷方式,点击Rename,并且为这个快捷方式改一个适当的名字。Installshield可以自动监测到.exe文件的存在,自动生成快捷方式,用户只需要做一些适当修改即可。 免安装版Tomcat7的bin目录下有tomcat7.exe、tomcat7w.exe两个.exe文件,Installshield会自动为其创建快捷方式,这里已被移除,以下是创建好的快捷方式。注意右边的几个选项。 Create shortcut in Start Menu,将在开始菜单里创建一个快捷方式。Create shortcut on Desktop,将在桌面上创建一个快捷方式。Use alternate shortcut Icon,替换快捷方式的图标。Associate a file extension with the shortcuts target,没用过,不知道什么意思。再切换去Installation Designer,找到System Configuration | Shortcuts。看到快捷方式在开始菜单中是以公司名软件名快捷方式这种形式存在的, 这里改成了如下设置 :直接拖动CKMH文件夹往Program Menu(即开始菜单下的那个“所有程序”)下一塞即可,然后删除掉多余的Company Name文件夹。可能刚才在Project Assistant界面有人已经注意到了左边栏上More Options下Create an uninstallation shortcut这个诱人的字样了。如果选择了这种方式建立卸载快捷方式的话,会很沮丧地发现: a) 似乎只有在安装某个feature的时候这个卸载快捷方式才会出现(当然,就是那个default feature,这种要命的feature形式决定了每个文件或者快捷方式都必须明确地归属到某个feature下),因此,当客户只选择了其他feature安装时,这个卸载方式不会出现,而他必须去“添加或卸载程序”里面去卸载。b) 如果写脚本使得安装时会拷贝一些外部文件进来,那么这些文件在这种卸载方式下是删除不掉的。(如果确实想保存这些文件,可以在脚本里设置它们属性为permanent,这个属性可以保证什么卸载方式都不能删除你的这些文件)。 可以根据软件情况选择这种卸载快捷方式,或者采用后面脚本形式实现的卸载。6. Application Registry 向注册表写键和键值。有需要的朋友可以查阅相关资料。在脚本中有一段修改注册表的代码:7. Installation Location 这个是用来设置安装包的语言。 这里没有改动,使用默认的简体中文。8. Build Installation选择要创建的安装映像类型。至此,第一部分基本完成。如果是一些没有特别要求的安装包,这部分讲解的内容足够可以做一个基本的安装包了。第二部分:XML文件修改以修改 tomcat7confserver.xml 为例:找到Installation Designer页面上左边导航树System Configuration | XML File Changes 节点,打开XML文件更改界面,导入原始XML文件,右键点击根节点XML File,选择Import,打开导入向导界面,点击Browse,选择需要导入的XML文件,Next选择XML元素,这里全选,点击Import,点击 完成,即可看到导入的XML文件,选中导入的server.xml文件,右侧有配置项,在General页签,指定该文件在安装文件中的位置,以及所属Feature;左侧树展开server.xml文件,显示所有元素,以Connector元素的port属性为例,右侧General页签中,其默认值为8080,这里将其改为:TOM_PORT,(带有括号)。TOM_PORT是Behavior and Logic | Property Manager 下已经存在的属性。注:属性定义必须大写,原因不知。自定义安装界面(参考第三部分)获取用户输入的端口号,通过脚本为该属性赋值,进而改变XML文件中的值。注:脚本中的数字1306是自定义安装界面中输入框的Control Identifier。以上为修改XML文件元素属性值,如果是修改元素内容,例如:修改dsn.xml文件中name元素的内容,在右侧Advanced页签中,选中Set element content,设置元素内容,在输入框中输入已定义的属性,如:NAME,要加方括号,并通过脚本为该属性赋值。第三部分:自定义对话框找到Installation Designer页面上左边导航树User Interface | Dialogs 节点,打开Dialog视图。1. 在Dialogs视图中,右键All Dialog,选择新建对话框(New Dialog);2. 创建一个空白对话框,命名为Tomport.3. 双击MyDlg下的子项即可进入对话框的编辑模式;注意:点击窗体,显示右侧属性 Resource Identifier需要根据需要自己定义,此值会在代码中使用到;需特别注意,为防止与其他的Id冲突,可设置较大一点,其后的ID会根据此ID自动递增。4. 工具栏有各种对话框组件,在工具栏上选择组件,然后在对话框界面上拖拉出相应组件,这里添加一个文本域和一个输入框,右侧可以修改组件属性,注意一下这里的Control Identifer属性值,后面脚本中会用到。其Control Identifier值会根据Resource Identifier自增(窗体的Id叫 Resource Identifier,而组件的Id就称为Control Identifier)然后根据实际需要设计窗体布局。其他的组件,如:上一步、下一步等,我是从其他已有的对话框中复制过来的,根据需要稍作修改,按钮的Control Identifier值要与其他对话框一样,否则不起作用,不清楚为什么。注意:在dialog中必须添加一个Control Identifier为2的控件,否则点击右上角Close button的时候,是没有响应的。界面部分已经完成,还需要写相应脚本,初始化对话框,给文本框赋值,或从文本框取值,具体脚本在第四部分SetTomportInfo。第四部分:安装windows服务1、 脚本方式以Tomcat7注册为windows服务为例,将服务设置为开机启动,安装完成后启动该服务,脚本代码如图:代码写在OnFirstUIAfter事件中,详细代码见第五章脚本编程OnFirstUIAfter。此处是利用免安装版Tomcat自带的service.bat批处理文件,注册服务,将Tomcat注册为windows服务,建议使用脚本方式,视图配置方式不太好用。代码解释:1 szRegTomcat= INSTALLDIR tomcat7binservice.bat;INSTALLDIR 表示安装路径,tomcat7binservice.bat为安装文件(根据实际安装文件目录修改),并且该文件一定要放到SUPPORTDIR 文件夹去,方法如下:找到Installation Designer页面上左边导航树Behavior and Logic | Support Files / Billboards 节点,将service.bat文件放到Support Files/Language Independent下。2 nAddServer = LaunchAppAndWait(szRegTomcat,install,WAIT);执行批处理文件,第二个参数install为执行时的参数,表示安装服务,如果返回值小于0,表示安装失败。3 MessageBox (添加Tomcat服务出错,SEVERE);消息弹框。4 RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); szKeyRoot = SYSTEMCurrentControlSetServicesTomcat7 ; RegDBSetKeyValueEx(szKeyRoot,Start,REGDB_NUMBER,2,-1);修改注册表,服务安装后,启动类型默认为手动,修改注册表将启动类型改为自动,注册表位置HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTomcat7,将Start的值改为2(其中2为Automatic自动, 3为Manul手动, 4为Disabled禁用)。5 ServiceStartService(Tomcat7,);启动服务。注:Tomcat7为服务名,此名称为service.bat文件中的默认服务名,且与tomcat7bin目录下的tomcat7.exe、tomcat7w.exe显示名称一致,否则tomcat7.exe、tomcat7w.exe无法使用。服务安装完成后,要为该服务添加一个控制组件,针对该服务配置组件安装完成和卸载时触发的事件,方法类似下面视图方式的添加Control Service组件,具体步骤如下:1 导航树Organization - Setup Design 节点,在左边工作区,右击服务所在feature,选择Component Wizard:2 进入Wizard后,选择第2项:Let me select a type and define the component:3 设置组件名称,选择Control Service:4 选择Service is present on target system,输入上面安装的服务名称Tomcat7:5 组件安装完成后触发的事件,这里选择No event(do nothing)。如果脚本中没有写安装完成启动服务的代码,可以在这里配置,选择Start the service。6 设置在组件被卸载的时候触发的事件,这里设置停止并删除服务:7 设置安装和卸载时,进程的等待状态,选默认就可以了,下一步到完成。二、视图配置方式添加Install Service组件1 找到Installation Designer页面上左边导航树Organization - Components 节点:2 在左边工作区,右击Components,选择Component Wizard:3 第一个对话框是要求建立feature的,这里点Yes就可以了,我选择了叫它在需要的时候自动生成feature;注:如果要在已有的feature下新建Install Service组件或Control Service组件,-会有不同,导航树Organization - Setup Design 节点,在左边工作区,右击目标feature,选择Component Wizard,后续步骤相同。4 进入Wizard后,选择第2项:Let me select a type and define the component:5 设置组件名称,选择Install Service:6 在Service Executable里,选择要安装的windows service文件,在Services里,点Add按钮,添加这个文件包含的服务,这里写的服务名称要和程序里的对应:7 设置Display Name,按自己的服务设置Service Type:8 设置服务的启动方式,这里设置的是随机器启动:Automatically when the system starts up:9 下一步,下一步,设置服务启动出错的时候要做什么操作,后面的就一直下一步到完成:注:如果要修改所加服务组件的可执行文件路径,可在组件的信息界面更改destination:按这种方式安装Tomcat服务后,打开Tomcat7w.exe,会发现需要的配置信息都是空的,且服务无法启动,所以安装Tomcat服务推荐使用脚本方式。其他服务视情况而定。添加Control Service组件1 重复上面-;2 设置组件名称,选择Control Service:3 选择该组件要控制的服务,这里直接选择Service is included in this setup,选择刚才添加的服务,就是说这个组件要控制的服务是刚才添加的组件里的服务:4 设置在组件安装完后要触发的事件,这里设置为启动服务:5 设置在组件被卸载的时候触发的事件,这里设置停止并删除服务:6 设置安装和卸载时,进程的等待状态,选默认就可以了,下一步到完成。第五部分:脚本编程找到Installation Designer页面上左边导航树Behavior and Logic | Installscript 节点,进入脚本编程视图。下面就是脚本的主要实现:脚步主要包括六个部分,即六个事件处理过程:OnBeginOnEndOnFirstUIAfterOnFirstUIBeforeOnMainUIAfterOnUninstall这六个事件都是自动生成的,需要特殊的处理就在事件里面写脚步就可以了。下面就是具体的脚本,全都在Setup.rul文件中,用到OnFirstUIAfter、OnFirstUIBefore,及自定义对话框出处理函数SetTomportInfo:Setup.rul文件头部/=/ File Name: Setup.rul/ Description: Blank setup main script file/ Comments: Blank setup is an empty setup project. If you want to/ create a new project via. step-by step instructions use the/ 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); */export prototype SetTomportInfo(BYREF STRING,BYREF STRING);OnFirstUIBefore此处定义安装界面需要展示的对话框,及对话框出现的顺序。function OnFirstUIBefore() NUMBER nResult, nSetupType, nvSize, nUser; STRING szTitle, szMsg, szQuestion, svName, svCompany, szFile, szOpt1, szOpt2, szBankPort; STRING szLicenseFile; LIST list, listStartCopy; BOOL bCustom, bLicenseAccepted, bRtf;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); 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_SdLicense2Ex: szTitle = ;szOpt1 = ;szOpt2 = ;szLicenseFile = SUPPORTDIRLicense.txt;/License文件bLicenseAccepted = FALSE;bRtf = FALSE;/MessageBox (szLicenseFile,MB_YESNO); nResult = SdLicense2Ex (szTitle, szOpt1, szOpt2, szLicenseFile, bLicenseAccepted, bRtf); if (nResult = BACK) goto Dlg_SdWelcome;Dlg_Tomport: szMsg = ; szBankPort=8080; nResult=SetTomportInfo(szMsg,szBankPort); /使用新创建的界面 if(nResult=BACK) goto Dlg_SdLicense2Ex;Dlg_SdAskDestPath: nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0); if (nResult = BACK) goto Dlg_Tomport;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 = SdStartCopy2( szTitle, szMsg ); ListDestroy(listStartCopy); if (nResult = BACK) then goto Dlg_SdAskDestPath; endif; / setup default status Enable(STATUSEX); return 0;end;代码解释:Dlg_SdWelcome:安装欢迎界面;Dlg_SdLicense2Ex:协议声明界面;Dlg_Tomport:此为自定义界面,配置Tomcat服务访问端口,默认为8080;Dlg_SdAskDestPath:选择安装路径;Dlg_SdStartCopy:开始安装界面。OnFirstUIAfter创建卸载快捷方式,注册windows服务,修改服务启动类型,启动服务,设置安装结束界面。/-/ OnFirstUIAfter/ 安装完成后,点完成前发生的事件/-function OnFirstUIAfter() STRING szfilename,szFolder ,szmsg1,szmsg2;STRING szRegTomcat;STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;STRING szKeyRoot;NUMBER bStartService, nresult;NUMBER bvOpt1, bvOpt2, nAddServer; beginShowObjWizardPages(NEXT);szTitle = ; szMsg1 = ; szMsg2 = ; szOpt1 = ; szOpt2 = ;bvOpt1 = FALSE; bvOpt2 = FALSE; /创建卸载快捷方式szfilename = UNINSTALL_STRING + /UNINSTALL;nresult = StrFind(szfilename,.exe);if nresult =0 thenStrSub(szmsg1,szfilename,0,nresult + 4);StrSub(szmsg2,szfilename,nresult + 4,200);LongPathToQuote(szmsg1, FALSE );LongPathToQuote(szmsg2, FALSE );szfilename = + szmsg1 + +szmsg2;endif;AddFolderIcon(FOLDER_PROGRAMSCKMH,Uninstall_CKMH,szfilename,WINDIR,0,REPLACE);/注册windows服务szRegTomcat= INSTALLDIR tomcat7binservice.bat;/ MessageBox (添加Tomcat:+szRegTomcat,SEVERE); nAddServer = LaunchAppAndWait(szRegTomcat,install,WAIT);if(nAddServer=0) then/修改服务启动类型为自动RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); /设置注册表函数默认值szKeyRoot = SYSTEMCurrentControlSetServicesTomcat7 ; /HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTomcat7RegDBSetKeyValueEx(szKeyRoot,Start,REGDB_NUMBER,2,-1);/修改 Start 值为 2 ,其中2为Automatic, 3为Manul, 4为Disabled/启动服务ServiceStartService(Tomcat7,);endif;/安装完成 对话框 if ( BATCH_INSTALL ) thenSdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 ); elseSdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 ); endif;end;代码解释:*szfilename = UNINSTALL_STRING + /UNINSTALL;参数一:UNINSTALL_STRING这个静态变量指向的就是安装程序,也就是setup.exe,不过指向的位置不是源盘里的setup.exe,而是C:Program FilesInstallShield Installation Information0D9DF66A-44E5-4754-A522-2AD6C9D5CDBEsetup.exe;Installshield创建的安装文件在安装时总会在这个文件夹里创建对应信息,一长串数字型序列码就是安装程序的Product ID。利用这个setup.exe就可以进行反安装;参数二:/UNINSTALL,告诉程序启动这个setup.exe时为非安装状态,即修复、重新安装和卸载状态。因此,这个字符串的值应该是这种形式:C:Program FilesInstallShield Installation Information0D9DF66A-44E5-4754-A522-2AD6C9D5CDBEsetup.exe -runfromtemp -l0x0409 /UNINSTALL*nresult = StrFind(szfilename,.exe);寻找到“.exe”这个字符串在szfilename这个字符串中的位置。Help里对这个函数的描述如下:StrFind (szString, szFindMe);参数一:szString,被查找的源字符串参数二:szFindMe,要查找的字符串返回值为要查找的字符串在源字符串中的位置,如果返回值小于0,则说明源字符串中找不到要查找的字符串;*StrSub(szmsg1,szfilename,0,nresult + 4);StrSub(szmsg2,szfilename,nresult + 4,200);如果要查找的字符串存在,那么源字符串就是正确的;这两句语句就对源字符串进行截断,得到想要的子串。szmsg1应该为C:Program FilesInstallShield Installation Information0D9DF66A-44E5-4754-A522-2AD6C9D5CDBEsetup.exe;而szmsg2应该为 -runfromtemp -l0x0409 /UNINSTALL;Help里的解释如下:StrSub ( svSubStr, szString, nStart, nLength ); 参数一:svSubStr返回的结果字符串参数二:szfilename源字符串参数三:开始截断的位置。如果指定的位置大于整个被解析的字符串长度,则返回一个空字串。参数四:结束截断的位置。如果指定的位置大于整个被解析的字符串长度,则默认为结束截断的位置是字符串的结尾处。*LongPathToQuote(szmsg1, FALSE );LongPathToQuote(szmsg2, FALSE );这两句的作用是对上面解析出的两个子串脱去引号。*szfilename = + szmsg1 + +szmsg2;拼凑出正确的可执行文件的长文件名,带路径,包含扩展名;*AddFolderIcon(FOLDER_PROGRAMSCKMH,Uninstall_CKMH,szfilename,WINDIR,0,REPLACE);添加一个快捷方式到 开始 | 所有程序 | CKMH 下,快捷方式名称为 Uninstall_CKMH。这个快捷方式运行的时候,出现界面和在安装完毕后再次运行安装程序出现的界面相同,选择Remove即可进行卸载。这个卸载不会把程序运行时产生的文件卸载掉,比如日志文件、配置信息文件等;会把安装目录中所有从安装程序中安装的文件都卸载掉,包括安装时从外部拷贝的文件。利用Project Assistant创建的卸载快捷方式则无法卸载掉安装时从外部拷贝的文件。注册windows服务的代码在第四部分脚本方式中有解释,在此不再赘述。*SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 );安装结束对话框。SetTomportInfo自定义对话框的处理函数,需要在Setup.rul文件头部添加一行代码:export prototype SetTomportInfo(BYREF STRING,BYREF STRING);其中用到的Resource Identifier、Control Identified需要根据自定义对话框设置修改。function SetTomportInfo(szMsg,svPort) STRING szDlg, szTemp; BOOL bDone; NUMBER nId, nMessage, nTemp, nSdDialog, nSdCustomRegisterUserEx; HWND hwndDlg, hwndControl;begin szDlg = Tomport;/对话框名称 nSdDialog = 22222;/自定义对话框的Resource Identifier

温馨提示

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

评论

0/150

提交评论