已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安装前安装前 设置界面公司标识设置界面公司标识 在 OnBegin 函数中 添加如下脚本 SetTitle IFX PRODUCT NAME Infomedia 0 BACKGROUNDCAPTION 安装中安装中 安装安装 net RegDBSetDefaultRoot HKEY LOCAL MACHINE if RegDBKeyExist SOFTWARE Microsoft NETFramework policy v4 0 0 then if AskYesNo 尚未安装 net framework4 0 n 是否安装 YES then if LaunchAppAndWait SUPPORTDIR dotNetFx40 Full x86 x64 en exe norestart WAIT 0 then SprintfBox MB OK NET 安装 安装 net 框架发生意外 else InstallNet TRUE endif else InstallNet FALSE endif else endif 注 InstallNet 在开始定义 BOOL 类型 修改 OnFirstUIAfter 中的脚本 以判断是否重启 vbs 控制控制 IIS 直接使用 adsutil vbs IIS 自带的脚本来做的 基本上 IIS 的所有操作都可以用这个脚本完成 目 录在 C inetpub AdminScripts ServerManagerCmd exe 管理安装服务器角色管理安装服务器角色 参数名称 修改修改 IIS 中中 ISAPI 和和 CGI 限制限制 windir system32 inetsrv appcmd exe set config section isapiCgiRestriction path C Windows Microsoft NET Framework v4 0 30319 aspnet isapi dll allowed True 控制文本框控制文本框 自定义界面 如果控制文本框 此时 当选择文本框时 便可取消其它选项的状态 多语言安装多语言安装 不同语言的安装文件放到不同的 Components 里 然后设置相应的安装语言条件即可 获取安装环境语言获取安装环境语言 获取获取 Version 信息信息 读取 ProductVersion Property Installshield 获取安装包版本的系统变量为 IFX PRODUCT VERSION 打开对话框的时候按某个路径打开 打开某一个路径的文件夹用这个函数 ShowProgramFolder szFolder nCommand 判断服务状态判断服务状态 ServiceGetServiceState Installshield 环境变量的追加与删除 环境变量的追加与删除 环境变量的添加或追加 问题 如何能在安装包中添加环境变量 而不用用户手动在我的电脑 属性 高级 环境变 量中设置 特别是 如何能判断已有的环境变量 如 Path 在不改变已有的环境变量的内 容的基础上 进行追加呢 解决方案 添加环境变量时 可以通过注册表中相应位置写键值的方式完成 HKEY LOCAL MACHINE SYSTEM ControlSet001 Control Session Manager Environment 首先判断 Path 是否存在 如果不存在 创建 如果存在 已有的内容进行追加 追加的 方法参考如下代码 function AddPath NUMBER nResult nType nSize nvSize nvType STRING strResult szkey szNumName szNumValue nRootKey szPath szPath2 STRING TITLE szFormat begin RegDBSetDefaultRoot HKEY LOCAL MACHINE szkey SYSTEM ControlSet001 Control Session Manager Environment has no the key then create the key if RegDBKeyExist szkey 0 then if RegDBCreateKeyEx szkey 0 then MessageBox RegDBCreateKeyEx failed SEVERE return FALSE endif endif 添加系统路径 RegDBGetKeyValueEx szkey Path nvType szPath nvSize if szPath then PathSet szPath if PathAdd TARGETDIR scratch bin FULL AFTER 0 then MessageBox Unable to add to path buffer SEVERE abort endif PathGet szPath Disable LOGGING if RegDBSetKeyValueEx szkey Path REGDB STRING szPath 1 0 then MessageBox RegDBSetKeyValueEx failed SEVERE return FALSE endif Enable LOGGING else szPath TARGETDIR scratch bin Set a key name and a value associated with it Disable LOGGING if RegDBSetKeyValueEx szkey Path REGDB STRING szPath 1 0 then StrSub szmsg1 szfilename 0 nresult 4 StrSub szmsg2 szfilename nresult 4 200 LongPathToQuote szmsg1 FALSE LongPathToQuote szmsg2 FALSE szfilename szmsg1 szmsg2 endif if LaunchAppAndWait szmsg1 szmsg2 LAAW OPTION WAIT INCL CHILD LAAW OPTION WAIT 0 then MessageBox 旧版本卸载失败 MB OK abort else WaitForApplication LAAW PROCESS INFORMATION hProcess LAAW PROCESS INFORMATION dwProcessId INFINITE LAAW OPTION WAIT INCL CHILD LAAW OPTION WAIT endif szIcon DesktopFolder DeleteFolderIcon szIcon AliProbe szDir INSTALLDIR AliProbe V1 1 DeleteDir szDir ALLCONTENTS end 需要注意的地方是 在调用 LaunchAppAndWait 方法等待老版本卸载完成的时候 一定要 加上 LAAW OPTION WAIT INCL CHILD 主要是因为卸载的过程是 Windows Install 启动 卸载程序 所以一定要等待 Windows Install 的子进程结束 否则将不能等待 4 在 OnResumeUIAfter 中完成新版本的安装 脚本如下 OnResumeUIAfter The OnResumeUIBefore event is called when end user runs installation that is performing a resumed install Usually this happens by specifying a property like REINSTALL or ADDLOCAL at the command line when the product is already installed In the handler installation usually displays UI that will inform end user that Reinstallation has been completed successfully function OnResumeUIAfter STRING noUse NUMBER szProcessId NUMBER nvProcessHandle Handle to a process NUMBER nvModuleHandle Handle to a process module STRING szModuleName Module filename NUMBER nvBytesRequired begin szProcessId GetCurrentProcessId if szProcessId 0 then if ProcessRunning noUse szProcessId szModuleName TRUE then LaunchApp szModuleName hide progress else MessageBox 自动安装新版本遇到问题 请再次运行安装文件完成安装 MB OK endif else MessageBox 自动安装新版本遇到问题 请再次运行安装文件完成安装 MB OK endif end 这里是通过 GetCurrentProcessId 得到当前进程的 Id 并调用 ProcessRunning 获取当前进 程模块的完整路径 5 ProcessRunning 的脚本如下 Function Process Running Description Determines if the specified process is running in memory Parameters szAppName Name of the application to check nvFindProcessId ID of the process to find szFindModName Name of the Module of the found process Returns TRUE The process is running FALSE The process is not running function BOOL ProcessRunning szAppName nvFindProcessId szFindModName BOOL bvRunning Process is running NUMBER nvProcessIDs 512 Array of process IDs NUMBER nvBytesReturned Number of bytes returned in process ID array NUMBER nvProcesses Number of processes running NUMBER nvIndex Loop index NUMBER nvProcessHandle Handle to a process NUMBER nvModuleHandle Handle to a process module NUMBER nvBytesRequired Number of bytes required to store values POINTER pvProcessIDs Pointer to process ID array STRING svModuleName Module name STRING svFileName Module filename begin The psapi dll reads the Windows NT performance database The DLL is part of the Win32 SDK if UseDLL WINSYSDIR PSAPI FILE 0 then Could not load psapi dll MessageBox ERROR Could not load WINSYSDIR PSAPI FILE SEVERE return FALSE endif Get the PIDs of all currently running processes pvProcessIDs ArrayToPointer nvProcessIDs EnumProcesses pvProcessIDs 512 nvBytesReturned Determine the number of process IDs retrieved Each process ID is PROCESSID LENGTH bytes nvProcesses nvBytesReturned PROCESSID LENGTH Get the executable associated with each process and check if its filename matches the one passed to the function for nvIndex 1 to nvProcesses Get a handle to the process nvProcessHandle OpenProcess PROCESS QUERY INFORMATION PROCESS VM READ 0 nvProcessIDs nvIndex if nvProcessHandle 0 then Get a handle to the first module in the process which should be the executable if EnumProcessModules nvProcessHandle nvModuleHandle PROCESSID LENGTH nvBytesRequired 0 then Get the path of the module if GetModuleFileNameExA nvProcessHandle nvModuleHandle svModuleName SizeOf svModuleName 0 then Extract the filename without an extension from the path Add by QianShi at 2010 6 23 Get module name by process id if nvProcessIDs nvIndex nvFindProcessId then szFindModName svModuleName bvRunning TRUE goto ProcessRunningEnd endif ParsePath svFileName svModuleName FILENAME ONLY if StrCompare svFileName szAppName 0 then The process module matches the application name passed to the function bvRunning TRUE goto ProcessRunningEnd endif endif endif endif endfor ProcessRunningEnd if UnUseDLL PSAPI FILE Internet Information Services 直观的点击右键创建新的虚似目录 问题又出现了 当本机没有安装 IIS 的时候 安装包 显示一个错误信息直接就退出了 帮主说要先检测本机有没有 I IS 没有的话要跳出对话 框让用户选择是继续安装还是退出安装 被逼无奈 只能到处找资料把问题解决 找到检测本机是否安装 IIS 的脚本 如下 prototype CheckIIS 监测系统是否安装了 IIS function CheckIIS NUMBER nvType nvSize STRING svvalue begin RegDBSetDefaultRoot HKEY LOCAL MACHINE if RegDBKeyExist System CurrentControlSet Services IISADMIN 1 then return 1 else return 0 endif end 接下来就是要寻找如何用 InstallScript 创建虚似目录了 还是上次推荐的地方 有两 篇配置 IIS 的文章又帮了我一个忙 InstallShield xzIISConfig 用于配置 IIS 的 InstallScript 脚本 InstallShield 更新了 xzIISConfig 配置脚本和 xzSQLDeploy Tools 在二帮主的帮助下写出了创建虚似目录的脚本 如下 set objIIS Root CoGetObject IIS localhost W3SVC 1 Root if IsObject objIIS Root then try set objVirtDir objIIS Root Create IISWebVirtualDir VIRTUALDIR if IsObject objVirtDir then objVirtDir Path VIRTUALDIRPATH objVirtDir AccessRead TRUE objVirtDir AccessScript TRUE objVirtDir AccessExecute TRUE objVirtDir SetInfo objVirtDir AppCreate TRUE objVirtDir SetInfo endif catch set objVirtDir CoGetObject IIS localhost W3SVC 1 Root VIRTUALDIR if IsObject objVirtDir then MessageBox 存在同名虚似目录 WARNING endif endcatch endif 2 创建创建 ISPAI 筛选器筛选器 创建 ISAPI 筛选器的脚本 set filters CoGetObject IIS localhost W3SVC Filters if IsObject filters then try set filter filters Create IIsFilter jakarta if IsObject filter then filter FilterDescription jakarta filter FilterPath TARGETDIR isapi redirector2 dll filter FilterEnabled TRUE filter SetInfo filters FilterLoadOrder jakarta filters SetInfo endif catch set filter NULL set filter CoGetObject IIS localhost W3SVC Filters jakarta if IsObject filter then MessageBox 存在同名 ISPAI 筛选器 WARNING filters delete IIsFilter jakarta endif endcatch endif 这个脚本是二帮主帮忙下写的 本来这个 ISAPI 的筛选器是创建在默认 web 站点的 应 该是检测 set filters CoGetObject IIS localhost W3SVC 1 Filters 是否存在 然后再 创建的 ISPAI 筛选器的 但是调试过程中创建不了 只能创建在更上一级 IIS localhost W3SVC Filters 3 创建创建 web 服务扩展服务扩展 web 服务扩展 这个特性是 WinServer2003 里 IIS6 0 增加的新特征 我查阅了资料 说 IIS5 0 和 IIS6 0 的区别很大 并且 IIS6 0 把对 IIS 的配置数据保存在一个 xml 文件里 c windows system32 下的 Metabase xml 包含 IIS 6 0 服务器的配置信息 经过调试 发 现 web 服务扩展的数据存放在 IIS localhost W3SVC 节点下面的 WebSvcExtRestrictionList 处 用函数 AddExtensionFile 来添加 web 服务扩展的文件 IIsWebService AddExtensionFileAddExtensionFile ExtensionFile 要添加的 web 服务扩展文件 bEnable 是否为 Allowed 0 为允许 1 为禁止 GroupID 所属组 bCanDelete UI 里是否可以删除 0 本能删除 1 可以删除 Description web 服务扩扩展的名称 InstallScript 如下 bEnable 1 bCanDelete 1 set IIsWebServiceObj CoGetObject IIS localhost W3SVC IIsWebServiceObj DeleteExtensionFileRecord TARGETDIR isapi redirector2 dll IIsWebServiceObj AddExtensionFile TARGETDIR isapi redirector2 dll bEnable test bCanDelete test IIsWebServiceObj EnableApplication test IIsWebServiceObj SetInfo 本来只要把参数 bEnable 设置为 1 这个 web 服务扩展状态就是 允许 bCanDelete 设置为 1 UI 里就应该是可以删除的 但是调试当中出发现并不是这样的 无论怎么设置 这两个变量它们都是 0 只能再通过 EnableApplication 函数把刚刚添加的文件设置 为允许状态 至于如何让 UI 中可以删除这个 web 服务扩展 还没有找到方法 注意 web 服务扩展 这个特性是 WinServer2003 里 IIS6 0 增加的新特征 特有的属 性 如果不是这个操作系统饿话 安装包在运行过程中会报错 可以先检测本机是什么操 作系统 具体的帮助文档可以查阅 SYSINFO 章节 检测的脚本如下 if SYSINFO WINNT bWinServer2003 then MessageBox Installing on WinServer2003 INFORMATION endif 自动安装与卸载自动安装与卸载 IIS 相关相关 Webservice 运行报错 运行报错 net 文件夹无法访问文件夹无法访问 在 C Windows Microsoft NET Framework v2 0 50727 文件夹下建立 Temporary ASP NET Files 文件夹 权限授予 everyone 调用调用 C dll 环境 Installshield 12 win xp Vs2005 用 vs2010 试了好几天出错 出现函数不可调 用 在 is 12 中建了 installshield installscript msi 工程 INSTALLSHIELD 中的主要代码 prototype STRING DESInterface DESEncrypt STRING 这个是对 dl 中 l 函数的申明 function OnFirstUIAfter STRING szTitle szMsg1 szMsg2 szOption1 szOption2 NUMBER bOpt1 bOpt2 STRING szFeatureName1 szFeatureName2 szFeatureName3 STRING szfilename szFolder NUMBER nresult STRING szmsg1 szmsg2 STRING xmlPath STRING szDLLName OBJECT ObjInvokeDll STRING strEncryptSERVER STRING strEncryptPWD STRING TEMP begin Disable STATUSEX bOpt1 FALSE bOpt2 FALSE if NeedWriteXml TRUE then xmlPath INSTALLDIR ParamSet DataBaseInfo xml szDLLName SUPPORTDIR DESInterface dll set ObjInvokeDll CoCreateObjectDotNet szDLLName DESInterface DES 这这 个是加载个是加载 dll 对象对象 TEMP ObjInvokeDll DESEncrypt PWD 这个是调用这个是调用 函数函数 endif end net c 中的代码 用 vs2005 写的 特别提醒要把工程中的特别提醒要把工程中的 Properties 下的下的 AssemblyInfo cs 中的中的 assembly ComVisible false 修改成修改成 assembly ComVisible true using System using System Collections Generic using System Text using System Security Cryptography namespace DESInterface 注意这个命名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 异丙醇装置操作工测试验证知识考核试卷含答案
- 漆艺师岗前记录考核试卷含答案
- 时钟装配工安全培训竞赛考核试卷含答案
- 拖拉机驾驶员持续改进知识考核试卷含答案
- 彩灯艺术设计师安全文明竞赛考核试卷含答案
- 生物农药生产工技能强化考核试卷含答案
- 煤层气固井工复测模拟考核试卷含答案
- 污泥处理工岗中健康知识考核试卷含答案
- 稀土真空热还原工岗中水平能力考核试卷含答案
- 时间频率计量员安全防护竞赛考核试卷含答案
- 2026冶炼厂面试题及答案
- 课堂英语教师口语用语200句
- 中小学生日常行为规范暨教育惩戒实施细则
- 2026富邦华一银行成都分行社会招聘笔试参考题库及答案详解
- 2026年高考政治真题完全解读(黑吉辽蒙卷)
- 电厂运行事故处理操作要点培训课件
- 预埋螺栓施工方案
- 2026年山东省济宁市重点学校小升初入学分班考试语文考试试题及答案
- 2026年农作物植保员职业技能竞赛模拟题库及参考答案详解(培优A卷)
- 滴滴货运营销方案策划
- 2026贵州省农业发展集团有限责任公司招录(第一批)岗位65人备考题库及参考答案详解一套
评论
0/150
提交评论