Horizon_King

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在总结五中对注册表的操作,其实是为了总结六中的安装系统组件作准备。因为首先要知道系统有没有安装该软件环境,然后才能进行选择性的安装。

同样,这一步应该设计在首页之后用户信息之前,防止给用户以安装过程分离缺少整体性的感觉,也要明确是前期必备软件环境安装。因此可以在总结五中创建的checkbox窗体中的On Next中添加相应的安装代码。

需要注意的是:Setup Factory 7.0中的文件分为存档、外部,存档的文件是要安装在目标程序目录上的,外部的打包进安装程序可以释放到指定目录。此外,还有一个不太显眼的“资源”文件,只有“资源”中的初始文件是临时释放到TempFolder进行运行然后自清除的,我们需要使用的也是这个存贮方式。可以点击菜单栏中的“资源”>“初始文件”,打开对应的对话框。

image

image
然后,我们在这个checkbox屏幕中添加相应代码,没有安装而被用户选中的将进行自安装。

其中Shell.Execute()是执行指定程序的函数,临时目录的变量为%TempLaunchFolder%,假设该程序文件名为“dotnetfx.exe”,那么可以写成“_TempLaunchFolder..\\dotnetfx.exe”。

在安装过程中需要判断这个程序是否执行完毕,才能继续下一步。这样就得用到循环语句,通过添加代码中的“repeat …until not循环”来进行条件循环,再在循环内加入操作File.IsInUse来读取程序运行状态。

这里安装MCR 7.8和.NetFramework 2.0的代码如下:

-- 这些操作在点击“下一步”按钮时执行。
-- 提示:你可以在这里添加验证用户输入信息的操作
tProperties1 = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_01);
tProperties2 = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_02);

-- 运行临时文件夹中的MCRInstaller.exe文件
if(tProperties1.Checked and tProperties1.Enabled) then
Shell.Execute(_TempLaunchFolder.."\\MCRInstaller.exe", "open", "", "", SW_SHOWNORMAL);
end 
repeat
-- 直至MCRInstaller.exe运行结束才进行下一步
SetupEnd1 = File.IsInUse(_TempLaunchFolder.."\\MCRInstaller.exe");
until not SetupEnd1

-- 运行临时文件夹中的dotnetfx.exe文件
if(tProperties2.Checked and tProperties2.Enabled) then
Shell.Execute(_TempLaunchFolder.."\\dotnetfx.exe", "open", "", "", SW_SHOWNORMAL);
end 
repeat
SetupEnd2 = File.IsInUse(_TempLaunchFolder.."\\dotnetfx.exe");
until not SetupEnd2

-- 进入下一个屏幕
Screen.Next();


添加好代码后的窗体如图:

image

这样在这个checkbox窗体检查完系统环境之后,点击“Next”按钮就会执行相应的组件安装操作。

posted on 2011-05-18 11:18  Horizon_King  阅读(6271)  评论(0编辑  收藏  举报