InstallShild选择安装目录主要涉及到SdAskDestPath 和SdAskDestPath2函数。
这两个函数功能貌似差不多,当点击窗口上的“浏览”按钮时,又调用SelectDirNoLog(也可以是SelectDir)方法弹出选择文件夹的对话框,并返回用户选择的结果。
如果想在用户选择的目录后面追加上公司名称等目录(这样做还有一个好处,当用户直接选择安装在磁盘根目录下的时候,仍然可以再追加一个目录而不是直接把各种文件释放到根目录中,显得十分混乱),可以在SelectDir返回之后,在得到的路径后面添加上自己的目录。不过要注意检查是否有重复的问题。在用户选择目录之前一般都会有一个默认的安装路径,SelectDir返回之后应检查一下返回的结果与默认值是否相同,如果不同的话再在用户选择的路径后面追加上公司名。
不过考虑的许多软件的默认安装路径都是C:/Program Files/公司名/产品名,而用户可能是直接把盘符改为D,所以应该对这种情况作出判断,避免D:/Program Files/公司名/产品名/公司名/产品名…… 这样的结果。再扩展一下的话,如果用户已经手动创建了目录,例如在
E:/软件/公司名/产品名;然后在浏览对话框里选择了这个目录,我们也应该能够识别。
具体的可以参考以下代码:
修改前的代码
修改后
把重写后的SdAsdDestPath文件取一个名字,例如MyAskDestPathDlg.rul,函数名叫做MyAskDestPath,然后在主程序里加上#include "MyAskDestPath.rul",然后在以前调用SdAskDestPath2的地方调用自己的函数就可以实现在用户选择的目录后面追加公司名称的效果了。
PS:
SdAskDestPath和SdAskDestPath2以及其他大量系统方法的代码可以在InstallShield安装目录下的 ./InstallShield X/Script/isrt/src 目录中找到。
附:SdAskDestPath2Dlg.h源码
以上是我总结的关于InstallShield制作安装包时,在用户选择的目录后面追加一个目录的解决方法,比较简单。欢迎大家批评指教或转帖。
转帖请注明出处 http://blog.youkuaiyun.com/icycode/archive/2009/12/01/4916392.aspx