一个完整的安装程序实例之补遗_20081022_—艾泽拉斯之海洋女神出品
### 知识点详解 #### 一、背景与概述 本文档是对《一个完整的安装程序实例—艾泽拉斯之海洋女神出品》的补充说明,主要针对安装程序完成后遇到的应用程序运行时的小问题进行了解决方案的阐述。这些解决方案主要是通过在安装过程中传递参数和设置环境变量来实现的。 #### 二、JAVA_HOME的问题 1. **问题描述**: - 在安装程序中设置JAVA_HOME环境变量是为了确保应用程序能够找到JDK的安装路径。然而,在调试过程中发现,通过注册表设置的环境变量需要系统重启才能生效,这导致了在安装程序执行完毕后立即运行依赖于JAVA_HOME的应用程序时出现问题。 2. **解决方案**: - 修改批处理文件中的`set JAVA_HOME=%JAVA_HOME%`为`set JAVA_HOME=%1`,这样可以通过安装程序传递参数的方式动态地设定JAVA_HOME的值。 - 在安装脚本中调用`LaunchApp`函数时,将第二个参数设置为JDK的路径(即svValue,这里指的是JDK安装路径)。 - 这样做的好处是避免了用户必须重启系统才能使环境变量生效的问题,提高了用户体验。 3. **代码示例**: ```plaintext if(LaunchApp(serviceTarget, javahome) < 0) then ``` 其中`javahome`即为`if(RegDBSetKeyValueEx(szKey, "JAVA_HOME", REGDB_STRING, svValue, -1) < 0) then`语句中的`svValue`,表示JDK的安装路径。 4. **LaunchApp函数解析**: - 参数一:需要打开的文件及其相对路径。 - 参数二:cmd_line,这里传入JDK的路径作为参数,使得批处理文件能够正确识别并启动。 #### 三、Path的问题 1. **问题描述**: - 在安装JavaService时遇到了无法启动服务的问题,经排查发现是由于环境变量Path中未包含JRE的Bin文件路径所致。 - 这个问题可能与JavaService和操作系统有关,不同的操作系统可能会有不同的行为。 2. **解决方案**: - 需要在Path环境中添加JRE的Bin文件路径,以便JavaService能够正确启动。 - 注意事项: - Path通常已经存在并包含其他内容,因此在添加新的路径时需要考虑与现有内容的分隔符(通常是分号)。 - 卸载时需要确保不会误删除其他非本次安装添加的Path项。 3. **代码示例**: - 为了实现Path的修改,可以在安装程序的`OnEnd()`事件中添加如下代码片段: ```plaintext szKey="SOFTWARE\\JavaSoft\\JavaRuntimeEnvironment\\1.6.0_04"; // jre的键 RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); // 设置根键 if (RegDBKeyExist(szKey) = 1) then // 如果这个键存在 if (RegDBGetKeyValueEx(szKey, "JavaHome", nvType, s)) // 获取JRE路径并添加到Path环境变量中 ``` #### 四、总结 本文档通过具体的案例介绍了在安装程序完成后可能遇到的一些常见问题及其解决方案。重点介绍了如何通过传递参数和设置环境变量来解决JAVA_HOME和Path配置问题,这对于提高应用程序的兼容性和用户体验具有重要意义。此外,还对`LaunchApp`函数的不同使用场景进行了详细解释,有助于开发人员更好地理解该函数的功能和使用方法。希望这些解决方案能够帮助开发者们在未来的项目中避免或解决类似问题。
- fj_better2012-07-10非常好的入门教程,收益匪浅!
- 粉丝: 18
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助