installShield2010日志
### InstallShield 2010 使用心得与技巧详解 #### 一、简介 InstallShield是一款功能强大的安装包制作工具,广泛应用于软件开发领域中的安装程序创建。它支持多种操作系统平台,能够帮助开发者轻松构建出稳定可靠的安装程序。本文将基于一篇关于InstallShield 2010的日志内容,详细解析其在实际应用过程中的几个关键知识点,帮助读者更好地理解和掌握InstallShield 2010。 #### 二、安装前检查系统是否已安装某软件 在安装程序的过程中,有时需要判断当前系统是否已经安装了特定的软件,以避免重复安装或覆盖安装的问题。InstallShield 2010提供了灵活的方式来实现这一需求: ```pascal if (RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE) = 0) then if (RegDBKeyExist("SOFTWARE\Productname\featurename") = 1) then MessageBox("warning…", SEVERE); Do(EXIT); end if; end if; ``` **代码解析**: 1. **`RegDBSetDefaultRoot()`**:设置默认的注册表根键。 2. **`RegDBKeyExist()`**:检查指定的注册表键是否存在。 3. **`MessageBox()`**:显示警告消息框。 4. **`Do(EXIT)`**:退出安装程序。 这段代码首先设置默认的注册表根键为`HKEY_LOCAL_MACHINE`,然后检查`SOFTWARE\Productname\featurename`这个路径下的注册表键是否存在。如果存在,则弹出警告信息,并退出安装流程。 #### 三、判断是否选择安装某组件 在安装过程中,用户可能会选择安装多个组件或特性。为了根据不同用户的选型进行相应的处理,可以使用以下方法: ```pascal if (FeatureIsItemSelected(MEDIA, FeatureName) = 1) then // 用户选择了该组件,可以进行相应操作 end if; ``` **代码解析**: 1. **`FeatureIsItemSelected()`**:判断用户是否选择了指定的组件。 2. **`MEDIA`**:表示安装介质。 3. **`FeatureName`**:待检查的组件名称。 此方法用于判断用户是否选择了名为`FeatureName`的组件。如果用户选择了该组件,则可以执行后续的相关操作。 #### 四、服务操作 在安装程序中管理服务也是常见需求之一。InstallShield 2010提供了一系列服务相关的函数,如`ServiceStartService`、`ServiceGetServiceState`等,这些函数可以用来控制服务的启动、停止、查询状态等。 具体函数如下: - `ServiceStartService`:启动服务。 - `ServiceGetServiceState`:获取服务状态。 - `ServiceExists`:检查服务是否存在。 - `ServiceRemoveService`:删除服务。 - `ServiceAddService`:添加服务。 - `ServiceStopService`:停止服务。 这些函数的具体使用方法请参考官方的帮助文档。 #### 五、让某程序设置为开机自动启动 设置程序在系统启动时自动运行,可以增强程序的功能性和用户体验。以下是具体的实现方法: ```pascal if (RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE) = 0) then RegDBCreateKeyEx("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "SystemTray"); RegDBSetKeyValueEx("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "SystemTray", REGDB_STRING, TARGETDIR ^ "Document\123.exe", -1); end if; ``` **代码解析**: 1. **`RegDBCreateKeyEx()`**:创建注册表键。 2. **`RegDBSetKeyValueEx()`**:设置注册表键值。 3. **`TARGETDIR`**:目标目录变量。 此代码段将指定的程序(`Document\123.exe`)设置为开机自动启动。 #### 六、修改配置文件 在安装结束后,可能需要根据安装环境对某些配置文件进行修改。以下是一个示例代码: ```pascal iWrite = WriteProfString(szBatPath ^ "cfg\config.ini", "path_list", "path_count", "1"); if (iWrite < 0) then MessageBox("waring", INFORMATION); end if; ``` **代码解析**: 1. **`WriteProfString()`**:写入配置文件。 2. **`szBatPath`**:批处理文件路径变量。 此代码片段用于修改位于`szBatPath\cfg\config.ini`配置文件中的`path_list\path_count`键值。 #### 七、获取系统日期并根据日期创建文件夹 有时候需要根据当前系统日期创建文件夹,以便于管理和分类存储文件。以下是一个实现示例: ```pascal GetSystemInfo(DATE, nvResult, svResult); record = TARGETDIR ^ "fileName" + svResult; WriteProfString(TARGETDIR ^ "\cfg\config.ini", "path_list", "path", TARGETDIR ^ "\Recording" ^ svResult); if (WriteProfString(szBatPath ^ "cfg\config.ini", "path_list", "path0", record) < 0) then MessageBox("warninginformation", INFORMATION); end if; if (CreateDir(record) < 0) then MessageBox("warninginformation", INFORMATION); end if; ``` **代码解析**: 1. **`GetSystemInfo()`**:获取系统信息。 2. **`CreateDir()`**:创建文件夹。 此代码段首先调用`GetSystemInfo()`函数获取当前系统日期,并将其与固定字符串拼接后作为文件夹名。之后使用`CreateDir()`函数创建该文件夹。 #### 八、调用程序或命令 在安装过程中,可能需要调用外部程序或系统命令。InstallShield 2010提供了`LaunchAppAndWait`和`LaunchApp`两个函数来满足这种需求。 例如: - `LaunchAppAndWait`:调用程序并等待其完成。 - `LaunchApp`:调用程序但不等待其完成。 这些函数使得安装程序能够更加灵活地与其他程序或命令交互。 #### 九、控制自定义对话框中按钮的状态 对于自定义对话框,可以使用特定的方法来控制其中按钮的状态,如启用或禁用等。以下是一个示例代码: ```pascal case DLG_INIT: hwndDlg = CmdGetHwndDlg(szDialogName); case RES_PBUT_YES: hwnd... ``` 这里展示了如何在自定义对话框初始化阶段获取对话框句柄,并进一步控制按钮的状态。具体的操作细节需要结合实际情况进行调整。 ### 总结 通过上述示例代码及其解析,我们可以看到InstallShield 2010虽然在某些方面可能存在局限性,但其提供的丰富功能足以满足大多数软件安装的需求。掌握这些技巧,能够显著提升软件安装程序的质量和用户体验。希望本文能够为使用InstallShield 2010的开发者们提供有价值的参考。
- yuhang199107022014-09-15很有帮助,谢谢!
- qq_149660192018-03-23很好的资源
- lcx51892015-05-09很好,是一个很好的资源......
- 粉丝: 2689
- 资源: 41
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助