我正在使用Inno Setup Compiler(Pascal Scripting)。 我的表单有一个图像对象(TBitmapImage),我想提供从网址获得的动态图像。是否可以在Inno Setup脚本中静默下载图像(或其他类型的文件)?
答案 0 :(得分:3)
我会编写一个从Internet下载文件的小型Win32程序,例如
program dwnld;
uses
SysUtils, Windows, WinInet;
const
PARAM_USER_AGENT = 1;
PARAM_URL = 2;
PARAM_FILE_NAME = 3;
function DownloadFile(const UserAgent, URL, FileName: string): boolean;
const
BUF_SIZE = 4096;
var
hInet, hURL: HINTERNET;
f: file;
buf: PByte;
amtc: cardinal;
amti: integer;
begin
result := false;
hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
hURL := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0);
try
GetMem(buf, BUF_SIZE);
try
FileMode := fmOpenWrite;
AssignFile(f, FileName);
try
Rewrite(f, 1);
repeat
InternetReadFile(hURL, buf, BUF_SIZE, amtc);
BlockWrite(f, buf^, amtc, amti);
until amtc = 0;
result := true;
finally
CloseFile(f);
end;
finally
FreeMem(buf);
end;
finally
InternetCloseHandle(hURL);
end;
finally
InternetCloseHandle(hInet);
end;
end;
begin
ExitCode := 0;
if ParamCount < 3 then
begin
MessageBox(0,
PChar(Format('%s: This program requires three command-line arguments.',
[ExtractFileName(ParamStr(0))])),
PChar(ExtractFileName(ParamStr(0))),
MB_ICONERROR);
Exit;
end;
if FileExists(ParamStr(PARAM_FILE_NAME)) then
DeleteFile(PChar(ParamStr(PARAM_FILE_NAME)));
if DownloadFile(ParamStr(PARAM_USER_AGENT), ParamStr(PARAM_URL),
ParamStr(PARAM_FILE_NAME)) then
ExitCode := 1;
end.
此程序需要三个命令行参数:要发送到Web服务器的UserAgent(可以是任何内容,例如“MyApp Setup Utility”),Internet上文件的URL以及文件名。正在创建的文件。不要忘记将参数括在引号(“)中。如果下载失败,程序的退出代码为0,如果下载成功,则为1。
然后,在您的Inno安装脚本中,您可以
[Files]
Source: "dwnld.exe"; DestDir: "{app}"; Flags: dontcopy
[Code]
function InitializeSetup: boolean;
var
ResultCode: integer;
begin
ExtractTemporaryFile('dwnld.exe');
if Exec(ExpandConstant('{tmp}\dwnld.exe'),
ExpandConstant('"{AppName} Setup Utility" "http://privat.rejbrand.se/sample.bmp" "{tmp}\bg.bmp"'),
'', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
if ResultCode = 1 then
(* Now you can do something with the file ExpandConstant('{tmp}\bg.bmp') *);
end;
不幸的是,我知道你无法在运行时更改WizardImageFile
...
答案 1 :(得分:2)
实际上可以使用InnoTools Downloader从网上下载几乎任何内容。
答案 2 :(得分:0)
Inno安装程序没有任何内置功能,但是,您可以使用为您完成工作的批处理文件来执行此操作。
1)下载命令行URL资源下载器,如 - http://www.chami.com/free/url2file_wincon.html
有关如何使用它的一些提示 - http://www.chami.com/tips/windows/062598W.html
2)将其打包在安装程序中
3)创建一个调用url2file.exe的批处理文件,并将您的图像提取到app目录
4)在Inno Setup安装程序脚本的初始化设置命令中调用此批处理文件。
5)在任何地方使用该图像!
ps - 如果您在设置中使用图像,请检查是否允许不同的图像加载..我不确定。 如果您有任何其他问题,请告诉我