一、打包.net framework 4.0运行环境到依赖中
先点开“从属”设置:
添加从属文件.net 4
编辑添加的从属文件,指定.net framework 4.0的安装包
完成!
二、打包.net framework 4.6.1运行环境到安装包中
此时不能再通过“从属”文件设置,因为setupfactory支持的最高到4.0,此时怎么办呢?
2.1 点开“初始文件”设置
2.2 在安装前自动检测.net环境,如果没有.net framework 4.6就自动安装
这里附上检测.net版本的脚本:(其他版本的自行查看注册表)
//.net 4.0
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\SKUs\\.NETFramework,Version=v4.0");
// .net 4.5.2
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\SKUs\\.NETFramework,Version=v4.5.2");
//.net 4.5.3
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\SKUs\\.NETFramework,Version=v4.5.3");
//.net 4.6
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\SKUs\\.NETFramework,Version=v4.6");
//.net 4.6.1
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\SKUs\\.NETFramework,Version=v4.6.1");
三、安装时检测系统如果没有.net 4.0运行环境,就自动下载安装
测试不能使用“从属”、也不能使用“初始文件”,只能自己在安装前检测了,操作如下:
完整的脚本如下:
hasInstalled = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\SKUs\\.NETFramework,Version=v4.0");
if hasInstalled == false then
result = Dialog.Message("安装提示", "运行本软件需要安装.Net框架4.0版,是否从网络中下载并安装?", MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1)
if result == IDYES then
-- Show the StatusDlg
SetupData.WriteToLogFile("用户选择了下载安装.net framework4.0./r/n", true);
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
SetupData.WriteToLogFile("开始下载./r/n", true);
HTTP.DownloadSecure("https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe", SessionVar.Expand("%TempFolder%/dotNetFx40_Full_x86_x64.exe"), MODE_BINARY, 3000, 443, nil, nil, DownloadCallback);
SetupData.WriteToLogFile("下载完毕./r/n", true);
SetupData.WriteToLogFile(SessionVar.Expand("%TempFolder%/dotNetFx40_Full_x86_x64.exe"))
-- Hide the StatusDlg
StatusDlg.Hide();
Shell.Execute(SessionVar.Expand("%TempFolder%/dotNetFx40_Full_x86_x64.exe"), "open", "", "", SW_SHOWNORMAL)
else
Application.Exit(0);
end
end
-- Callback function for HTTP.Download
function DownloadCallback (nDownloaded, nTotal, TransferRate, SecondLeft, SecondsLeftFormat, Message)
SetupData.WriteToLogFile("下载回调:./r/n", true);
-- 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