mic*_*210 4 inno-setup pascalscript
解压缩程序我找到了我要找的东西,他应该在安装后解压缩文件。这是InnoUnzip.ZIP
我的安装程序文件夹如下所示:

我的代码:
[Setup]
AppName=My Program
AppVersion=1.0
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "unzipper.dll"; Flags: dontcopy
Source: "MyProg.exe"; DestDir: "{app}"
Source: "Somefile.zip"; DestDir: "{app}"; AfterInstall: ExtractMe('{app}\Somefile.zip', '{app}');
[Icons]
Name: "{commonprograms}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"
[Code]
procedure unzip(src, target: AnsiString);
external 'unzip@files:unzipper.dll stdcall delayload';
procedure ExtractMe(src, target : AnsiString); - ERROR HERE!!!!!
begin
unzip(ExpandConstant(src), ExpandConstant(target));
end;
Run Code Online (Sandbox Code Playgroud)
文本错误:“提取我”的原型无效
遵循TLama关于DLL冗余的观点:通过UnZip()直接在Inno Setup脚本中进行编码,可以实现相同的效果。
const
SHCONTCH_NOPROGRESSBOX = 4;
SHCONTCH_RESPONDYESTOALL = 16;
procedure Unzip(ZipFile, TargetFolder: String);
var
ShellObj, SrcFile, DestFolder: Variant;
begin
ShellObj := CreateOleObject('Shell.Application');
SrcFile := ShellObj.NameSpace(ZipFile);
DestFolder := ShellObj.NameSpace(TargetFolder);
DestFolder.CopyHere(SrcFile.Items, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL)
end;
procedure ExtractMe(src, target : String);
begin
// Add extra application code here, then:
Unzip(ExpandConstant(src), ExpandConstant(target));
end;
Run Code Online (Sandbox Code Playgroud)
Inno Setup脚本代码与DLL的代码大致相同...只是短一些。
请注意,如果Zip或Destination文件夹不存在,该NameSpace()方法将调用return a Null,CopyHere()失败,并且用户会看到粗鲁而令人困惑的对话框-因此最好在调用之前进行检查。
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |