|
从注册表自动获得安装路径篇 好了,安装程序运行后背景音乐开始播放了,我们点下一步,看到了用户协议,以及再下一步的选择安装目录,因为这两个有所关联,所以一起讲。首先将选择安装目录的事情吧。首先,我做的这个是补丁安装包,既然是补丁安装包,也就是对源程序进行修补,安装的时候,自然希望直接定位到源程序,而不需要用户手动去选择目录这么麻烦,虽然选好和主程序一样的默认目录也是一个办法,不过个人觉得还不够。考虑到所有程序安装的时候,都会在注册表里面生成一个注册文件,在注册信息里面,我确实看到了输入有源程序的安装目录的键,我觉得只要取这个键的数据,然后自动输入到安装路径里面去就行了,于是我写了以下代码 讲一下,Registry.GetValue函数是,在注册表的设定位置,从该位置的指定键里面获得数据然后我将获得的数据返回给了path变量(这个Lua脚本莫非使用变量不需要预先定义么?好像想用什么变量就用什么,真方便)然后我们需要将这个变量里面的数据传送给默认的安装目录,还记得我在上一讲所讲过的吧,涉及到参数的改变都需要使用SessionVar.函数系列,这里就用到了SessionVar.Set函数,作用是将%AppFolder%参数里面的数据设置成path里面的数据,而如果你要问为什么%AppFolder%就是默认安装目录,我只能说,请认真看基础教程。这样一来,就实现了从注册表的这个位置返回了地址给了默认安装目录的功能。 然后我发现,从这个地址不一定能返回正确的路径,因为源程序的安装程序,在某种情况下面,可能不会在这个地址写入安装地址,那怎么办?于是我想到了,只要安装了程序,就一定会产生删除文件,而删除文件的路径也会写到注册表里面,那我能不能利用这个删除文件的路径,获得安装地址呢?答案是可行的,于是我写了下面的代码 我能不能利用这个删除文件的路径,获得安装地址呢?答案是可行的,于是我写了下面的代码第一句话不解释了,就是获得删除文件的地址但是既然是删除地址,那么必然指向的是一个删除文件(X:\xx.exe),但是我们想要得到的是单纯的路径(X:\),那该怎么办呢,其实只要把后面的字符给删掉就可以了String.TrimRight函数的功能便是,从指定变量的字符串右边开始,删除指定的字符串,然后返回得到我们想要的字符串后,我们把变量里面的数据传送给了默认安装路径参数"%AppFolder%"这样从注册表的删除文件路径获得程序安装路径的功能实现了在此我贴一下全部的代码 可以看到代码中有If()then这种条件指令,功能就是用来,分辨上一条地址有木有获得,获得了就跳过,没有获得就从if里面的语句获得然后这里有一个问题需要注意,就是这段代码贴在哪里的问题 我们会想当然以为,既然是读取注册表的地址给默认安装目录,那就应该在选择安装目录的预加载选项卡里面的输入呗,其实不然,因为Setup Factory奇怪的机制,如果你选择在预加载选项卡输入代码的话,你会发现,自动读取路径的功能就无法实现了,地址了空白一片,当你点了返回到许可协议页面再点下一步的时候,地址栏上面才会出现读取注册表取得地址,这个问题,我估计是因为Setup Factory优先执行页面生成函数,后执行你写的Lua脚本导致的,这点请多加注意(为了找到这个Bug,我可是不知道测试了多少遍,改了多少遍代码,当一次无意中发现返回再下一步才能实现的时候,那种欲哭无泪的感觉啊,哎)那么怎么解决问题呢,也很简单,既然不能在这个页面的预加载里面执行,那么就到上个页面的下一步页面执行呗, 这里也就是在许可协议的下一步选项卡里面,把这段代码打进去,让代码在选择安装页面之前就执行,这点请多加注意 然后我在后面多写了一条其实没啥好讲的,就是判断%AppFolder%参数里面是不是空的(用SessionVar.Expand展开%AppFolder%参数),如果是空的话,就调用Dialog.Message显示一个没有自动读取到路径的窗口。 然后我闲着无聊,在下一步选项卡里多做了一个判断, 就是判断游戏目录下面,有木有源程序在,使用的代码如下我们先不看第一句话,从第二句开始,使用了一个函数File.DoesExist(),这个函数的作用是,查看指定位置是否存在指定的文件,如果存在返回true,不存在返回false。我利用了这条函数,根据这条函数的返回值,选择是否使用Dialog.Message,注意,这里我调用的Dialog.Message,使用了倒数第二条类型 也就是,这个信息窗口,会显示是与否的按钮,经过测试,我发现选择是的话,返回的值是6,如果选择的是否的话,返回的值是7因此根据返回值,设置是否进入下一个页面,亦或者停留在当前页面。 你以为到此,功能就算完善了么?其实不然,我闲着蛋疼,多做了些判断首先,许可证和选择安装目录之间,如果用户没事找事喜欢按返回,然后按下一步,然后返回,下一步,这样循环怎么办?总不能返回,然后下一步都要选择一次目录吧于是,我在许可证页面的下一步选项卡里面,在第一行添加了一句也就是说一开始就判断默认目录是否是空的,是空的就执行自动读取注册表,不是空的就跳过这些步骤 然后在选择安装目录和准备安装之间,如果用户没事找事喜欢按返回,然后按下一步,然后返回,下一步,这样循环怎么办?于是,我在准备安装页面的返回选项卡 打了这句话把默认安装地址给了变量result4然后在选择安装目录的下一步选项卡里面,在第一行添加了一句这样就能能判断地址是否有了变更,变更以后就执行接下来的判断,如果没有变更就直接跳到下一页,而不会继续跳出确认按钮。 至此关于自动读取注册表路径到默认安装路径的功能就全部讲解完毕了。
|