2024年2月9日发(作者:)

共 43 页 第 1 页

Setup Factory 7.0教程

用Setup Factory 7.0制作安装程序《基础篇》 ....................................................................................... 1

用Setup Factory 7.0制作安装程序《进阶篇》 ......................................................................................11

用Setup Factory 7.0制作安装程序问答篇rtfg ...................................................................................... 24

Setup Factory 7.0使用一例,插件安装程序 ......................................................................................... 29

Setup Factory 7 注册表实例, 新手教学................................................................................................ 35

Setup Factory 7 制作补丁初探............................................................................................................. 36

VB打包工具--- setup factory 7 使用总结 ............................................................................................. 38

Setup Factory读取注册表问题............................................................................................................. 40

Setup Factory 7 实现倒计时按钮 ......................................................................................................... 40

SF7中查找并中止一个进程 ................................................................................................................ 41

Setup Factory读取注册表问题............................................................................................................. 41

安装路径的问题 ................................................................................................................................. 42

用Setup Factory 7.0制作安装程序《基础篇》

我们希望制作一个精美的安装程序来发布自己的软件。在这里推荐使用Setup Factory 7.0,这是一款强大的安装程序制作工具。即使你对安装制作不了解,也可以生成专业性质的安装程序。可建立快捷方式,也可直接在 Windows 系统的注册表加入内容,还能在 和 内加入设定值,更可以建立反安装选项等等。它内附的向导可以一步步的带领您做出漂亮又专业的安装程序。

我在这里简单介绍一下如何使用Setup Factory 7.0来制作一个安装程序。

第 2 页 共 43 页

打开软件后,默认会跳出一个工程向导的界面,如上图。

此时可点创建来新建一个工程,或是按Esc键退出工程向导。由于在首次安装完Setup Factory 7.0后,默认语言为英文(可能会根据软件版本而不同),这样在制作安装程序时很不方便,因此需要先将默认语言改为中文简体。所以在这里我们先按Esc键退出工程向导,直接进入软件主界面。如下图。

在主界面菜单的编辑中选择“参数选择”,在出现的窗口中打开Document并点击Languages,然后在窗口右侧选中Chinese (Simplified),再点击下方的“设为默认”,最后确定即可。如下图。

现在我们可以开始制作安装程序了。

步骤一、添加程序文件

共 43 页 第 3 页

在菜单的工程中选择“添加文件”,或在主界面左侧的文件中选择“添加文件”。如下图所示,如果添加多个文件,则可选择“此文件夹中的所有文件”,如果有子文件夹,则选第三项“此文件夹及其子文件夹中的所有文件”。然后点击添加按钮。

文件加入后,即如下图所示。

步骤二、设置安装路径及快捷方式

用鼠标右键单击某一文件(也可选中多个文件对其编辑),选择“文件属性”,可修改相应设置。如下图所示,目标中默认为%AppFolder%,该变量表示安装路径,可以修改成其他自带变量或自定义变量(如:C:Program

FilesMicrosoft OfficeOFFICE11Officemb)。

第 4 页 共 43 页

如果该文件为可执行文件(如EXE文件等),那么默认会在开始菜单建立相应的快捷方式。点击上图中的快捷方式,即可出现相关设置。如果不需要快捷方式,可取消相关项目的选择。如下图。最后点确定按钮。

若不同的文件安装不同的路径,可重复操作步骤一、步骤二。

步骤三、设置软件信息及卸载

共 43 页 第 5 页

在左侧设置中点击“会话变量”,如下图所示,这些变量是Setup Factory 7.0自带的变量,选中左侧内容,可修改右部的软件信息。最后点确定。

新建安装程序默认会创建卸载,如果你的软件不需要卸载,那么点击主界面左侧卸载中的“设置”,可关闭“创建卸载”。如下图。

步骤四、制作安装过程中的屏幕

屏幕分三部分,安装前、安装中、安装后。点击主界面左侧屏幕中的工程主题,在跳出的窗口下方选择

第 6 页 共 43 页

工程主题可改变安装屏幕的样式。

①点击上图的“安装之前”,可在窗口左侧添加或删除相应的屏幕。如下图。

共 43 页 第 7 页

选中左侧某一屏幕(如“许可协议”)后,点窗口下方的编辑按钮,即可对该屏幕进行编辑。如下图。

在“属性”中则可修改屏幕标题和按钮等。如下图。

第 8 页 共 43 页

在“操作”中则可对该屏幕事件进行编程。如下图。通过窗口底部的“添加操作”和“添加代码”,可加入相应的代码来实现所需功能。

同样,对“安装之前”对话框中的“用户信息”也可进行设置。

②在“安装之时”屏幕中,若取消“安装期间显示进程屏幕”的选择,该屏幕在安装时将不再出现。如下图。

共 43 页 第 9 页

如果只是想在安装过程中不显示复制的文件名称及其路径,那么点击“编辑”按钮,并取消“显示状态文本一”的选择。如下图。

③在“安装之后”中,可编辑安装完毕后的屏幕界面。如下图。

第 10 页 共 43 页

上述过程完成后,一个简单的安装程序就可以发布了。

步骤五、生成安装文件

点击菜单发布中的构建,如下图所示,默认选择“Web(单个文件)”即可,再点击下一步。

确定输出安装程序的文件夹及安装程序文件名称,如下图。然后点击“构建”按钮。

共 43 页 第 11 页

现在我们就可以测试做好的安装程序了。别忘了将刚刚的Setup Factory 7.0工程保存到电脑上。本人把文件并命名为“超级查询器.sf7”。

汉化新世纪网友ddstrg收据了原作者其他文章以及论坛相关内容整理成CHM教学文件,方便大家学习,特此感谢!点击下载

用Setup Factory 7.0制作安装程序《进阶篇》

作者:Stanley Zhao 版权所有,如转载请注明出处

在基础篇里面,我们简单地讲了一下安装程序的制作过程,但是如果碰到一个稍微复杂点的安装程序,比如需要对注册表进行编辑,或是安装过程中需要执行外部文件等,那么又该如何处理呢?大家不要着急,看完进阶篇后你就知道怎么办了。

既然要处理各种复杂的事件,那当然是离不开编程。Setup Factory 7.0也提供了自己的语言来编写代码,主要是在“屏幕”和“操作”中。

打开上次保存的文件“超级查询器.sf7”,看主界面左侧的“操作”,共有4项:启动时、预安装时、进行安装时、关机时。如下图。

第 12 页 共 43 页

点击“启动时”,即可编写安装程序启动时需要处理的事件代码。如下图。

点击窗口下方的“添加操作”,可以加入Setup Factory 7.0所提供的事件代码(如添加“输入密码的对话框”等)。如下图。

共 43 页 第 13 页

一、设置安全性

1.设置“输入密码的对话框”

欲添加一个要求输入密码的对话框,可选择Dialog类别中的Input操作,如下图。

点击下一步后,出现下图:

第 14 页 共 43 页

在该操作的各项目中输入相应数据,成下图。

点击完成后,该操作就以代码的形式出现在窗口中了,如下图。

共 43 页 第 15 页

接着可以添加条件语句来判断密码是否有效。点击窗口下方的“添加代码”,并选择“if语句(不相等)”。如下图。

添加后,在窗口中多了几段代码,如下图。

第 16 页 共 43 页

这时,需要按它提供的格式进行修改这些代码。成下图。

我们需要在if语句内加入密码无效后的操作,即提示密码出错和退出安装程序。点击“添加操作”后,选

共 43 页 第 17 页

择Dialog类别中的Message操作以及Application类别中的Exit操作,修改完成后代码如下图所示。

这样就实现了一个简单的密码登录功能,稍微有些缺陷的是密码输入时是以明文显示。不过我们这里讲述的是如何通过添加操作和代码来实现相应功能,否则我们完全可以在安装之前的屏幕中通过添加验证序列号来实现此功能。那么如何实现验证序列号的功能呢?

2.生成序列号

首先我们要生成属于安装程序的序列号。在菜单工程中点击序列号,出现如下图所示窗口。

第 18 页 共 43 页

选中列表List 1,点击编辑,并选择命令中的生成。如下图。

然后输入需要的序列号数量以及格式,如下图。

确定后,即可生成所需的序列号,如下图。可将这些序列号全选后导出到一个文本文件中。最后点确定。

共 43 页 第 19 页

3.添加验证序列号屏幕

再到“安装之前”的屏幕中添加上“验证序列号”屏幕。如下图。这样,安装过程中验证序列号的功能就实现了。

4.设置“到期”

在菜单的“工程”中点击“到期”,并启用相关设置后,安装程序还能具备使用到期功能。如下图。

第 20 页 共 43 页

按上图中的设置制作的安装程序,如果执行安装程序的电脑上日期不在此范围之内,那么就会提示如下画面。不过,到期功能并不太实用,因为只要将电脑上的日期改成安装程序制作日期就能继续使用了。

二、执行外部文件

有时候在安装过程中或安装后需要执行其中一个程序,比如破解程序、汉化程序,或是一个驱动什么的东东,而这个程序可能不需要安装到电脑中,只需要在安装中被执行一次就OK了。那么我们就可以这么做。

1.添加文件

由于该程序不需要随着其他文件一起安装到电脑中,所以不能通过添加文件来加入到安装包中,而是点

共 43 页 第 21 页

击主界面左侧“资源”中的“原始文件”来添加,如上图。这样在安装程序执行时,该文件就被解压缩到临时目录下,并在安装程序正常关闭后自动删除。

2.选择外部文件的安装时段

然后,即可在某个屏幕中去添加相应代码。比如需要在安装之后但结束屏幕还未显示之前执行该程序。

具体操作是:点左侧“屏幕”中的“工程主题”→安装之后→编辑→操作,出现下图,接着添加程序:

把光标放在“02”后→按回车键→在“03”处输入“—执行程序”→按回车键→在“添加操作”中加入e→出现下图

第 22 页 共 43 页

注意临时目录的变量为%TempLaunchFolder%,假设该程序文件名为“”,那么可以把其中的“”写成“”。即某个字符型变量与字符串组合可以用“_变量名..字符串”的格式来书写。仅仅添加这一条代码还不够,我们还要判断该程序是否执行完毕,才能继续下一步,比如再执行下一个外部程序什么的。这样就得用到循环语句,通过添加代码中的“repeat …until循环”来得到一个循环语句,再在循环内加入操作e,并将值赋给一个自定义变量,最后修改循环条件。如下图。

三、通过注册码获安装路径来替换

有时,安装程序不需手动选择安装目录,而是固定安装在电脑中的某个目录下,比如插件、汉化、破解等。那么该目录的取得可能就是要读取注册表内某个软件的安装路径来重新定义了。下面就讲一下如何制作。

首先我们要从注册表内取得安装路径,这个取得过程应该是安装程序启动时就需要执行了。点击主界面左侧“操作”中的“启动时”,添加操作ue,并将值赋给一个自定义变量,ue的写法中,注意SubKey子键名称中子键连接符是“”,如下图。

此时,上图中的变量ProductPath就得到了一个安装路径,稍做处理后就可以作为本安装程序的安装路径。但是由于该变量是在代码中定义的,不能用在安装包内文件属性中的“目标”中。“目标”中的变量必须是会话

共 43 页 第 23 页

变量,因此我们可将变量ProductPath再赋给某个会话变量。会话变量可以是Setup Factory 7.0自带的,也可以自定义。点击主界面左侧“设置”中的“会话变量”,再点击窗口下方的“添加”可添加自定义会话变量。如下图。

然后再到代码中将刚刚的变量ProductPath赋给会话变量,注意必须使用操作来给会话变量赋值,例如(“%AppFolder%”, ProductPath)。如下图。

如果安装程序需要将安装包内的文件分别安装到不同目录下,那么就必须将这些文件属性中的“目标”修改成不同的会话变量才可实现。

第 24 页 共 43 页

Setup Factory 7.0的常用功能差不多就这些,主要是看你怎么合理利用它自带的操作,再结合控制代码,就能编写出功能强大的安装程序了。

用Setup Factory 7.0制作安装程序问答篇

作者:Stanley Zhao 版权所有,如转载请注明出处

1.问:如何让所安装的软件在开机进入系统后自行启动?

答:在安装程序中将软件添加到注册表的启动项目中,或者添加到开始菜单的启动项目中,还有一种方法是作为系统的服务来启动。在这里介绍的是第一种方法,即在注册表的启动项目中加入软件。

我们可在Setup Factory 7.0制作安装程序过程中,在“安装之后”屏幕的On Preload操作中,加入ue操作代码,写法参照下图,注意Data中为启动软件的绝对路径,可用“_会话变量名..字符串”的格式来书写,也可用操作将会话变量与字符串相加并赋值给一字符串变量,然后再将该变量写入此处。

2. 问:如何读写INI文件?

共 43 页 第 25 页

答:可在Setup Factory 7.0中的原始文件中添加INI文件,这样在安装程序执行时,INI文件就被解压缩到临时文件夹中了。然后在Setup Factory 7.0的某个阶段加入操作代码ue,就可取得INI文件中某区段内的某个值了。如下图。

3. 问:如何在安装程序中实现典型、最小或自定义安装功能?

答:在很多论坛上都看到有人说Setup Factory 7.0做不了典型、最小和自定义安装的功能,我的意见是只有想不到、没有做不到。实际上通过Setup Factory 7.0的程序包功能,很容易就能实现。大家可以参照下面的范例来制作自己的安装程序。

首先,我们在菜单上工程中的程序包中添加设置。在跳出的窗口中点击添加,并输入相关信息,如下图。

添加完各项安装方式的程序包后,清单如下图。

然后再到每个安装文件属性的程序包选项卡中,选择所属的程序包。注意,软件必要文件必须全选,而各安装方式所需要的文件则选择相应的程序包即可。如下图。

第 26 页 共 43 页

接下来,我们就要开始做屏幕了。在“安装之前”中添加一个单选按钮的屏幕,并将屏幕上的单选按钮进行设置,如下图。

这样设置后,在安装时就可以进行安装方式的选择了。但是我们如果选择了自定义安装,则还需要一个自定义安装的选择项,这个选择项应是可多选的,因此可再添加一个检查框屏幕,并做如下图所示的设置。

共 43 页 第 27 页

这两个屏幕添加完成后,修改其屏幕ID,如下图。

现在我们要开始在这两个屏幕中加入相应的代码来实现不同的安装了。

打开“安装方式选择”屏幕,先记下三个单选按钮的ID为:CTRL_RADIO_BUTTON_01、CTRL_RADIO_BUTTON_02、CTRL_RADIO_BUTTON_03。这个选择的结果会存储在会话变量%RadioSelection%中。然后我们在操作的On Next中开始加入代码。首先是需要将每个程序包设置为不安装,

第 28 页 共 43 页

因为假如在安装中选择某项安装方式后点了下一步,但是想修改安装方式又返回到这个屏幕,这样在重新选择了另外一个安装方式后,如果没有将原来选择的安装方式设置为不安装的话,将导致对应的两个程序包都被执行了设置安装的代码。因此必须在点了下一步的代码中先做程序包的初始化。设置一个程序包不安装的写法是:kageProperties(“程序包ID”,{Install = false})。

然后我们就可以写条件判断语句了,不过先得将存有单选按钮结果的会话变量处理后赋给另一个新变量,因为会话变量不能直接被使用在条件等式中。另外,如果选择“典型安装”或“最小安装”,应该要跳过“自定义安装选择”屏幕,而直接转到“准备安装”屏幕才对,所以我们需要用到(“屏幕ID”)这个操作。

该屏幕On Next操作的所有代码如下图。

我们再打开“自定义安装选择”屏幕来加入代码。在On Next操作中加入条件判断语句,根据三个复选框的选择结果来分别对各自的程序包设置安装状态。另外,如果三个自定义安装都不选,就应判定操作错误,因此还需添加相应的代码。如下图。

共 43 页 第 29 页

以上步骤完成后,就可以构建一个具有典型、最小和自定义安装功能的安装程序了。

以上是本人在使用Setup Factory 7.0近一年后的一点点心得。软件的功能当然不止于此,但因本人水平有限,只能介绍这么多了,希望能对大家做出一个自己满意的安装程序有所帮助。

Setup Factory 7.0使用一例,插件安装程序

实例说明:

本实例为TMPGEnc Xpress 4.0 +Adobe Premiere 插件安装程序。

Adobe Premiere 插件可以在Adobe Premiere 输出电影时,TMPGEnc Xpress 4.0可以直接渲染出来。那就不要中间转换一次电影格式。那可以减小转换时间。

1.本安装程序实用于安装的软件能单独运行,但软件又能做为第三方软件的插件使用。

2.安装程序自动获取(从注册表中)第三方软件的插件目录。

3.安装程序能显示第三方软件的插件目录路径和能修改所显示的路径。

4.安装程序在“准备安装”屏幕上会显示所设置的信息。

制作

文件设置

1。添加常规文件。

2.在设置为一个单独程序包。(我这里设置 程序包ID为 Adobe)如图

第 30 页 共 43 页

添加插件文件时,选中添加插件文件左击选中文件属性,在常规对话框中的目标中安装到变量设置为“%AppFolder1%”以下面设置时使用。

在程序包对话框中选中为前设置的“Adobe”,使添加插件文件为Adobe程序包的子文件。

界面设置

1.在屏幕主题里添加一个“检查框”和“选择安装文件夹”

共 43 页 第 31 页

2.在双击“检查框”屏幕中设置对话框中的“顶端,底部”信息改成自己要显示的文本。

复选框中的设置如图

在结果变量中的“check01”不能任意修改,要修改的话。在脚本里的设置参数也要修改。

3.在双击“选择安装文件夹”编辑属性对话框

屏幕 ID(这是设置为 Adobe Premiere插件目录)

窗口标题(这是设置为 %ProductName% 安装程序-Adobe Premiere插件目录)

子标题文本(这是设置为 您Adobe Premiere插件目录在何处?)

接下来就要设置的变量参数了。选到设置对话框,设置“默认文件夹”和“将结果存储在会话变量中”变量都设为“%AppFolder1%”,另提示对话框(这是设置为 将Adobe Premiere插件目录安装到:)

设置好的屏幕。如图

第 32 页 共 43 页

4.在准备安装屏幕设置对话框中文本中添加两个变量“%AppFolder1%,%AppFolder2%”以下面脚本使用。

%AppFolder1% 为显示Adobe Premiere 插件目录实际位置

%AppFolder2% 为显示显示 “Adobe Premiere 插件目录”字符串

位置如图

脚本设置

1。在“检查框”对话框中的On Preload中设置脚本如图

2。在“选择安装文件夹”屏幕的On Preload对话框设置代码,设置从注册表中获取Adobe Premiere 插件目录实际位置

共 43 页 第 33 页

t = ue(HKEY_LOCAL_MACHINE, “SOFTWAREAdobePremiereCurrentVersion”,

“Plug-InsDir”, true);

(“%AppFolder1%”, t);

在 On Next添加事件(如上图)

3.在“选择快捷方式”屏幕的On Back对话框设置代码

判断check01事件真假

if (check01) then

check01事件真

返回到上个屏幕

us();

else

check01事件假

返回到“选择安装文件夹”屏幕

(“选择安装文件夹”);

end

另外所有的屏幕中的On Back的事件都把();改成us();。

这样主要在有时用户设置要“准备安装”屏幕时。又想修改安装设置,以保证在撤消时屏幕显示不出错。

说明:

变量%AppFolder1%,%AppFolder2%”的显示效果在“准备安装”屏幕,如安装Adobe Premiere插件则显示如图(红线处),不安装就为空白。

最后你可以制作安装程序了。

Setup Factory 7.0优点

1.单独的屏幕选择和单独脚本编辑。可以不用代码也能制作简单的安装程序,也可以用代码制作复杂的安装程序。

2.屏幕可以使重复使用,这是我测试过许多安装制作没有的功能或只能单一的使用屏幕。

3.自动备件功能强大。

Setup Factory 7.0缺点

1.压缩不是很高。

2.创建特殊的快捷方式有点麻烦。

3.屏幕不能过去复杂的修改设计。

ddstrg

程序包的作用是让用户选择安装或不安装某些组件,比如插件、帮助文件、语言文件等等,很方便。

可以设置程序包的初始状态(选中或未选中),而不必在代码里指定,如图所示:

第 34 页 共 43 页

在 “工程 → 程序包” 处设置好程序包之后,一定要手动地添加一个 “选择程序包” 的屏幕,否则你设置的程序包就是没有用的。

在 “选择程序包” 屏幕上要把程序包添加到左侧窗格,才能让它显示出来:

共 43 页 第 35 页

Setup Factory 7 注册表实例, 新手教学

群里有人问SF7的注册表操作,很基础的问题,我就写了一个例子,主要靠点击各个按钮来进行控制。

主要有:创建键,删除键,创建键值,删除键值,读取注册表信息,判断是否有键值等

if (e_MsgID == MSGID_CLICKED) then

-- 点击了控件...

if (e_CtrlID == CTRL_BUTTON_01) then

-- 在这里插入按钮控制代码,第一个按钮

Key(HKEY_LOCAL_MACHINE, "SoftwareBuild");

e("创建", "您创建了一个注册表项!", MB_OK, MB_ICONNONE);

end

if (e_CtrlID == CTRL_BUTTON_02) then

-- 在这里插入按钮控制代码,第二个按钮

Key(HKEY_LOCAL_MACHINE, "SoftwareBuild");

e("删除", "您删除了一个注册表项!", MB_OK, MB_ICONNONE);

end

if (e_CtrlID == CTRL_BUTTON_03) then

-- 在这里插入按钮控制代码,第三个按钮

ue(HKEY_LOCAL_MACHINE, "SoftwareBuild", "Key1", "字符串值", REG_SZ);

ue(HKEY_LOCAL_MACHINE, "SoftwareBuild", "Key2", "11 00 11 12", REG_BINARY);

e("创建键值", "您创建了两个个注册表键值!", MB_OK, MB_ICONNONE);

end

if (e_CtrlID == CTRL_BUTTON_04) then

-- 在这里插入按钮控制代码,第四个按钮

Value(HKEY_LOCAL_MACHINE, "SoftwareBuild", "Key1");

e("删除", "您删除了一个注册表键值!", MB_OK, MB_ICONNONE);

end

if (e_CtrlID == CTRL_BUTTON_05) then

-- 在这里插入按钮控制代码,第四个按钮

RKEY1 = ue(HKEY_LOCAL_MACHINE, "SoftwareBuild", "Key1", true);

RKEY2 = ue(HKEY_LOCAL_MACHINE, "SoftwareBuild", "Key2", true);

("%PATCH1%", RKEY1);

("%PATCH2%", RKEY2);

-- 获得键值,并存到变量中,注意变量要事先在主界面的“会话变量”添加,也可以使用 Local 定义局部变量

TKEY1 = ueType(HKEY_LOCAL_MACHINE, "Softwarebuild", "Key1");

TKEY2 = ueType(HKEY_LOCAL_MACHINE, "Softwarebuild", "Key2");

("%TYPE1%", TKEY1);

("%TYPE2%", TKEY2);

-- 获得键值类型,并存到变量中,注意变量要事先在主界面的“会话变量”添加,也可以使用 Local 定义局部变量

();

();

-- 这两个命令用于快速的闪回前进屏幕,以便让大家看清楚变化

e("获得键值", "您获得了两个注册表键值和他们的类型!", MB_OK, MB_ICONNONE);

end

第 36 页 共 43 页

if (e_CtrlID == CTRL_BUTTON_06) then

-- 判断是否有一个键值

BUILD = yExist(HKEY_LOCAL_MACHINE, "SoftwareBuild");

if (BUILD == true) then

e("注意", "该键值存在", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

else if (BUILD == false) then

e("注意", "没有该键值", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

end

end

end

end

新问题:要导入注册表文件

[HKEY_LOCAL_MACHINESOFTWAREClassesSoftwareRealNetworksPreferencesDT_Objbrokr]

@="%SystemRoot%system32Real AlternativeCommon"

"注册表中用%SystemRoot%不行啊,换成c:windows就行了,为什么这样啊?

答:注册表的某些地方可以用 %SystemRoot%,有些地方又不行,我也不知道怎么区分。如果实在不能用,还有办法,供参考:

CODE

result = ("%SystemFolder%"); --获得系统目录字符串

Common = result.."Real AlternativeCommon"; --生成Common目录字符串,.. 为字符串连接符

ue(HKEY_LOCAL_MACHINE,

"SOFTWAREClassesSoftwareRealNetworksPreferencesDT_Objbrokr", "", Common, REG_SZ);

这个办法笨了一点,如果有更简洁的做法,请指出。

Setup Factory 7 制作补丁初探

一直都想想试试用 Setup Factory 7 做补丁,但是人懒了不想动,直到昨天才开始仔细地看了看,小有成果,与大家分享。

一开始想用阿信的 来调用 NSIS 的插件 ,但老是不成功,放弃。

不过还是要用到 VPatch:在

VPatch 主页下载 VPatch v3.1,安装好之后运行 VPatch GUI,比较两个(或多个)文件,使用 “Create EXE” 生成 exe 文件,默认文件名为 ,此文件内就包含了补丁的数据。

使用格式为: (sourcefile) (outputfile)

例如:

我整了半天,发现 与待补丁的文件和补丁后的文件必须在同一目录,而且新老版本文件的文件名不能相同,否则会有错误。不知道我的判断对不对,帮助文件也写得不是很清楚,熟悉它的朋友请告诉我一声。

好了,该主角出场了,我搞了半天,终于用 Setup Factory 7 成功地实现了补丁功能。

首先,将前面得到的 加入初始文件,下面的语句就看着办了:

-- 在注册表内获得原版程序的安装目录,并写入变量 %AppFolder%

InstallFolder = ue(HKEY_CURRENT_USER, "Software您的产品", "安装目录", false);

("%AppFolder%", InstallFolder);

-- 将 复制到安装目录

(("%TempLaunchFolder%"), ("%AppFolder%"), true,

true, false, true, nil);

-- 备份文件

共 43 页 第 37 页

function BackupFile(filename)

(("%AppFolder%backup"));

(("%AppFolder%")..filename, ("%AppFolder%backup"), true,

true, false, true, nil);

(("%AppFolder%")..filename,

("%AppFolder%")..filename..".tmp");

end

-- 补丁失败时恢复文件

function RestoreFile(filename)

(("%AppFolder%backup")..filename, ("%AppFolder%"), true,

true, false, true, nil);

(("%AppFolder%backup")..filename, false, false, false, nil);

(("%AppFolder%")..filename..".tmp", false, false, false, nil);

end

-- 补丁成功后删除临时文件

function DeleTempFile(filename)

(("%AppFolder%")..filename..".tmp", false, false, false, nil);

end

-- 补丁之前判断文件是否存在以及是否正在使用

function FileExistInUse(filename)

result1 = ist(("%AppFolder%")..filename);

result2 = not e(("%AppFolder%")..filename);

local result = result1 and result2;

return result;

-- result:

-- true = 文件存在且没有在使用

-- false = 文件不存在或正在使用

end

-- 调用 进行补丁

function PatchFile(filename)

local oldver = filename..".tmp";

result = ("", oldver.." "..filename, ("%AppFolder%"), SW_SHOWNORMAL,

true);

return result;

-- result:

-- 0 = 成功

-- 非0 = 失败

end

-- 开始补丁

if FileExistInUse("") then

-- 开始补丁前备份文件

BackupFile("");

if PatchFile("") == 0 then

e("成功", "补丁成功。", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

DeleTempFile("");

-- 进入下一个屏幕

第 38 页 共 43 页

();

else

e("错误", "错误的文件或路径,请检查。", MB_OK, MB_ICONINFORMATION,

MB_DEFBUTTON1);

RestoreFile("");

end

else

e("错误", "文件不存在或正在使用。", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);

end;

-- 删除

(("%AppFolder%"), false, false, false, nil);

我的算法可能还不太完善,稍显繁琐,希望有朋友继续加以改进。

刚才添加了一个 FileExistInUse 函数,用来判断文件是否存在以及是否正在使用。

VPatch下载地址:/?Go=Show::List&ID=11472

VB打包工具--- setup factory 7 使用总结

最近用setup factory 7 比较多,做了一个总结.

1 不包含源代码的打包过程

按照新建工程向导 选择了 ”为从属扫描工程文件“选项(或者从“工具”菜单-->扫描VB工程) 完成向导后

删除:frm/bas/vbp/vbw等源代码文件。

保留:exe/dll/ocx等运行支持文件

然后“发布”菜单--> 构建 --> 选择打包文件名 完成打包

最后安装的文件在安装夹下就没有代码文件了。

2 修改安装步骤的屏幕和信息

“工程”菜单 --> 屏幕... -->找到需要的阶段: 安装之前,安装之时,安装之后 --> 点击 “编辑”(还有添加、移除按钮) --> 修改安装信息。

添加代码是在操作(action)子项目下

3 添加可执行文件的快捷方式

找到可执行文件(*.exe)

右键文件,

选择“文件属性...”

找到“快捷方式”tab,选择需要加快捷方式的地方,如桌面等,也能在这里加入注释文字。

4 包含DAO数据库的打包

前提:需要DAO(Date Access Object),

一般是使用data 和 Access数据库。

1 正常包含了exe文件和支持文件

2 点击 左上角的“添加文件夹引用”(或者是“工程”菜单 -->“添加文件夹引用”),加入DAO文件夹(3个文件夹)。

3 点击 左下角的 启动时( "On Startup" actions) tab,

在事件代码中输入如下(因为7.0有个问题,在6.0不需要这样

添加)

("%CommonFiles%", ("%CommonFilesFolder%"));

5 程序如何在安装完成后自动调用另一个程序?

比如:安装之后,执行一个可执行文件()

在“工程”菜单 --> 屏幕...-->操作 界面-->安装之后 在onnext 事件中。

共 43 页 第 39 页

添加操作",会出现一个新建操作对话框,第一步选择一个类别,你选择shell,第二步选择一个操作,你选择e。

if (check01) then

-- 要执行的语句

();

e(("%AppFolder%").."", "open", "", "", SW_SHOWNORMAL);

else

();

end

6 安装前检查是否已经安装过软件?

在“工程”菜单 --> 屏幕...-->找到安装的第一个屏幕 找到preload 事件中

-- 用文件存在函数判断是否过安装软件

if ist("%AppFolder%") then

-- 如果文件存在,提示并退出安装程序

result = e("通知", "不好意思,软件已经安装过了,将退出安装.", MB_OK,

MB_ICONINFORMATION, MB_DEFBUTTON1);

();

end

7 搜索各个盘符搜索文件:

查找各个盘符,返回table 类型,

drives = ate();

max=(drives)

for count = 1,max do

-- 要执行的语句 文件查找函数

if( (drives[count], "", true, false)) then

count=max+1

result = e("通知","不好意思,软件已经安装过了,将退出安装程序", MB_OK,

MB_ICONINFORMATION, MB_DEFBUTTON1);

();

end

end

8 几个常用语句

e 打开文件

e 提示信息

查找文件

ist 文件是否存在

sionInfo 获取版本信息,返回table type

(); 退出

(); 下一屏幕

() table type 的个数(类似枚举类型)

ate 获取各个盘符,返回table type 使用类似数组 table1[1]

9 增加快捷方式时,注意设置文件的描诉别出现重名,否则一些文件将被覆盖。

如:可执行文件和帮助手册的描诉重名问题。造成只有帮助文件,无可执行文件。

10 产生错误2091,无法压缩数据库。

原因:在进程管理器中该可执行文件依旧在运行

处理:移除顺利打包。

第 40 页 共 43 页

11 更多请使用帮助,自己多用每个菜单。

Setup Factory读取注册表问题

问题:

我想在读取注册表中一个注册值,用来设置程序是否可用还是不可用

我是设置了在注册表中写入

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USERSoftwarePegasys c 4.0 XPressClipEdit]

"rm"="1"

在Setup Factory中我是这样写的。

re = ue(HKEY_CURRENT_USER, "SoftwarePegasys c 4.0 XPressClipEdit", "rm",

true);

if (re) then

perties(CTRL_RADIO_BUTTON_02, {Enabled = true});

end

可是不能实现我想要的效果。

请问我这那里错了啊!!!

ddstrg答:

ue 获得的值是字符串,不是布尔值。

表示路径的时候要用两个斜杠 。

Enabled = true 是设置允许与否, Checked = true 才是设置勾选与否。

re = ue(HKEY_CURRENT_USER, "SoftwarePegasys c 4.0 XPressClipEdit", "rm",

true);

if re=="1" then

perties(CTRL_RADIO_BUTTON_01, {Checked = false});

perties(CTRL_RADIO_BUTTON_02, {Checked = true});

end

Setup Factory 7 实现倒计时按钮

看到 NSIS 和 Inno 都能实现 禁用按钮 - 在按钮上倒计时 - 倒计时结束后启用按钮,就想试试用 Setup

Factory 7来做,果然能行的。

我用 “许可协议”这个屏幕来做,在On Preload事件里加入以下代码:

-- 将“我同意...”和“我不同意...”单选框禁用及隐藏

perties(CTRL_RADIOBTN_AGREE, {Visible = false, Enabled = false});

perties(CTRL_RADIOBTN_DISAGREE, {Visible = false, Enabled = false});

-- 禁用“下一步”按钮

perties(CTRL_BUTTON_NEXT, {Enabled = false});

-- 设置倒计时的时间

max = 10;

-- 开始计时器,间隔时间为1秒

imer(1000);

-- 设置“下一步”按钮的文本

perties(CTRL_BUTTON_NEXT, { Text = "我同意("..max..")" });

在 On Ctrl Message 事件里加入以下代码:

-- 计时器开始后将触发名为 MSGID_ONTIMER 的 e_MsgID

if e_MsgID == MSGID_ONTIMER then

共 43 页 第 41 页

-- 动态改变“下一步”按钮的文本

max = max - 1;

perties(CTRL_BUTTON_NEXT, { Text = "我同意("..max..")" });

-- 倒计时结束,停止计时器,并改变“下一步”按钮的文本

if max == 0 then

mer();

perties(CTRL_BUTTON_NEXT, { Text = "我同意(N) >" ,Enabled = true});

end

end

SF7中查找并中止一个进程

查找并中止一个进程:

可放在“全局函数”里

function FindAndCloseProcessByName(strName)

local tblProcesses = ateProcesses();

local bProcessFound = false;

local nProcessHandle = nil;

if(tblProcesses)then

local strProcessName;

local nHandle;

for nHandle, strProcessName in tblProcesses do

if((strProcessName,strName,1,false) ~= -1)then

nProcessHandle = nHandle;

bProcessFound = true;

end

end

end

if(bProcessFound and nProcessHandle)then

(nProcessHandle,CLOSEWND_TERMINATE);

end

end

调用:

-- Close MSN Messenger if running

FindAndCloseProcessByName("");

Setup Factory读取注册表问题

我想在读取注册表中一个注册值,用来设置程序是否可用还是不可用

我是设置了在注册表中写入

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USERSoftwarePegasys c 4.0 XPressClipEdit]

"rm"="1"

在Setup Factory中我是这样写的。

re = ue(HKEY_CURRENT_USER, "SoftwarePegasys c 4.0 XPressClipEdit",

"rm", true);

if (re) then

第 42 页 共 43 页

perties(CTRL_RADIO_BUTTON_02, {Enabled = true});

end

可是不能实现我想要的效果。

请问我这那里错了啊!!!

ddstrg答:

ue 获得的值是字符串,不是布尔值。

表示路径的时候要用两个斜杠 。

Enabled = true 是设置允许与否, Checked = true 才是设置勾选与否。

re = ue(HKEY_CURRENT_USER, "SoftwarePegasys c 4.0 XPressClipEdit",

"rm", true);

if re=="1" then

perties(CTRL_RADIO_BUTTON_01, {Checked = false});

perties(CTRL_RADIO_BUTTON_02, {Checked = true});

end

安装路径的问题

请看图

不能使用系统变量%SystemRoot%?

Setup

Factory 没有 %SystemRoot% 的变量,你在编辑框内单击右键,选择 “插入 → 变量”,就能看到了。

共 43 页 第 43 页

setupfactory哪里可以加注册表值?

可以在 vba中使用 SaveSetting 和 getSetting 这两个函数来解决。