本文共 4020 字,大约阅读时间需要 13 分钟。
制作安装程序,无非是复制文件、注册控件、注册服务、修改设置项(注册表、配置文件)等等。通过一些专门的安装制作软件不难做出一个专业的安装程序。
.net下的WinForm程序,制作安装包需要做些什么呢?
典型情况下可能需要做如下事情:1、判断客户机是否安装了.net framework
2、复制程序文件
3、将某些控件加入到全局应用程序缓存(GAC),比如第三方的控件或是自己定义的具有强名称的控件
4、安装时的默认设置项,比如程序的配置文件、或修改注册表等
5、创建快捷方式、软件的卸载
制作安装程序的工具比较多,常见的比如InstallShield、Wise Install、以及VS本身自带安装程序制作功能,前2个都是专业级的安装制作工具,所以安装文件也是巨大。这里我们推荐一款制作安装程序的软件Setup factory7.0,使用这个软件能够轻松的制作出一个专业的安装程序,它内置一种跟VBS类似的脚本语言,通过编写action脚本,能够实现比较强大的一些,比如从网上下载一些需要的安装文件。
对于Setup factory7.0的一般性使用这里就不详细介绍了,自己稍微摸索一下就知道了。我只介绍一下关于如何判断是否安装了.net framework及自动下载框架的安装文件并安装、如何修改注册表项、自定义安装界面等。
1、如何判断是否安装了.net framework
这里是判断注册表中是否存在框架的注册项。需要在Setup factory中的工程-操作的OnStartup事件中写如下代码:
--判断是否安装了.net框架hasInstalled = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software//Microsoft//.NETFramework");if hasInstalled == false then result = Dialog.Message("安装提示", "运行本软件需要安装.Net框架1.1版,是否从网络中下载并安装?", MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1) if result == IDYES then isExists = HTTP.TestConnection("http://www.zhangyongjun.com/fdown/uploadfile/dotnetfx.exe", 90, 80); if isExists == true then -- Show the StatusDlg StatusDlg.Show(MB_ICONINFORMATION, false); StatusDlg.ShowCancelButton(true, "取消"); -- Set statusdlg title and message StatusDlg.SetTitle("下载所需文件 . . . "); -- Set meter range (max range = 65534) StatusDlg.SetMeterRange(0, 100); -- Download a file from the internet to the user's computer -- Uses DownloadCallback() as the callback function HTTP.Download("http://www.zhangyongjun.com/fdown/uploadfile/dotnetfx.exe", SessionVar.Expand("%TempFolder%//dotnetfx.exe"), MODE_BINARY, 20, 80, nil, nil, DownloadCallback); -- Hide the StatusDlg StatusDlg.Hide(); Shell.Execute(SessionVar.Expand("%TempFolder%//dotnetfx.exe"), "open", "", "", SW_SHOWNORMAL) else Dialog.Message("错误提示", "下载文件失败,可能服务器已停止服务。请从Microsoft网站上下载.Net Framework1.1。", MB_ICONEXCLAMATION); Application.Exit(0); end else Application.Exit(0); endend -- Callback function for HTTP.Downloadfunction DownloadCallback (nDownloaded, nTotal, TransferRate, SecondLeft, SecondsLeftFormat, Message) -- Convert total and downloaded bytes into formatted strings sDownloaded = String.GetFormattedSize(nDownloaded, FMTSIZE_AUTOMATIC, true); sTotal = String.GetFormattedSize(nTotal, FMTSIZE_AUTOMATIC, true); -- Output time left, formatted. StatusDlg.SetMessage("正在下载文件 . . . 剩余时间: " .. SecondsLeftFormat); -- Output formatted sizes to user through statusdlg status text StatusDlg.SetStatusText("已下载: " .. sDownloaded .. " / " .. sTotal); -- Set meter position (fraction downloaded * max meter range) StatusDlg.SetMeterPos((nDownloaded / nTotal) * 100);end |
2、操作注册表
在定制安装界面中,可以添加一个界面,选择界面类型,并且能够自定义界面上的操作事件,比如在OnPreload、OnNext、OnBack、OnCancel、OnHelp编写脚本以实现特定的功能,下面的代码是实现在自定义的配置设置界面中用户填写完配置信息后,点“下一步”时,将填写的信息写入到注册表,其中CTRL_EDIT_01等为编辑控件(这里是文本框)的ID。
-- 这些操作在点击“下一步”按钮时执行。-- 提示:你可以在这里添加验证用户输入信息的操作Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software//FengcheSoft//TradeSystem");tEditFieldServer = DlgEditField.GetProperties(CTRL_EDIT_01);tEditFieldDBUser = DlgEditField.GetProperties(CTRL_EDIT_02);--Debug.ShowWindow( true ); Registry.SetValue(HKEY_LOCAL_MACHINE, "Software//FengcheSoft//TradeSystem", "ServerName", tEditFieldServer.Text, REG_SZ);Registry.SetValue(HKEY_LOCAL_MACHINE, "Software//FengcheSoft//TradeSystem", "DBUser", DlgEditField.GetProperties(CTRL_EDIT_02).Text, REG_SZ);Registry.SetValue(HKEY_LOCAL_MACHINE, "Software//FengcheSoft//TradeSystem", "DBPwd", DlgEditField.GetProperties(CTRL_EDIT_03).Text, REG_SZ);Registry.SetValue(HKEY_LOCAL_MACHINE, "Software//FengcheSoft//TradeSystem", "DBName", DlgEditField.GetProperties(CTRL_EDIT_04).Text, REG_SZ); Debug.Print(tEditFieldServer.Text);test = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software//FengcheSoft//TradeSystem", "ServerName", true);Debug.Print(test);-- 进入下一个屏幕Screen.Next(); |
Setup factory是一种比较强大而简单的安装制作软件,大家可以好好研究一下,一定能够实现你想要的功能!
附:
转载地址:http://puupi.baihongyu.com/