论坛风格切换切换到宽版
  • 6900阅读
  • 14回复

如何在安装前检测并解压7z文件,如何在code段定义安装到(src)? [复制链接]

上一主题 下一主题
离线solan
 

发帖
80
金钱
800
威望
80
只看楼主 倒序阅读 0 发表于: 2016-07-25
一、如何在安装前检测并解压7z文件?
最好放在这儿:

procedure CurStepChanged(CurStep: TSetupStep);

   version: Cardinal;   begin
    if CurStep = ssInstall then     // 根据组件选择的情况从外部文件中解压组件到指定的位置
.
.
要求解压前先检测7z文件的合法性,比如 hash或者密码,如果对的就解压到(app),如果不对,就提示错误。


二、如何在code段定义安装到(src),并且隐藏安装目录选择对话框?
我知道在setup段很好定义,但是由于需要现在要在code段定义,请求版主指导!!

离线solan

发帖
80
金钱
800
威望
80
只看该作者 1 发表于: 2016-07-25
请求大家帮忙,跪求了
离线solan

发帖
80
金钱
800
威望
80
只看该作者 2 发表于: 2016-07-26
一天啦,哪位好心人出来帮帮我
离线solan

发帖
80
金钱
800
威望
80
只看该作者 3 发表于: 2016-07-26
我在网上看到有人说在setup段DefaultDirName={code:myDirName}
但是在code段不知道怎么写,试了几次都不行
如果在code段也能想setup段那样写就好了DefaultDirName={pf}\kl
DefaultDirName={src}


离线solan

发帖
80
金钱
800
威望
80
只看该作者 4 发表于: 2016-07-26
那个隐藏和7z文件的校验现在知道怎么回事了
离线solan

发帖
80
金钱
800
威望
80
只看该作者 5 发表于: 2016-07-27
难道老师们也不知道吗?
离线lovelost

发帖
140
金钱
1060
威望
106
只看该作者 6 发表于: 2016-07-29
var
ComMD5: Integer;

   ComMD5 := CompareStr(GetMD5OfFile(ExpandConstant('{app}/ abcde.exe')), '56faga4457fa87fda4654f5645afdafddafdaf');//计算文件 MD5 值,并把结果返回给 ComMD5,0 代表相等
  if ComMD5 <> 0 then begin//如果文件不相同


离线lovelost

发帖
140
金钱
1060
威望
106
只看该作者 7 发表于: 2016-07-29

[Setup]
DefaultDirName={code:GetInstPath|{pf}\xxxxx}
DisableDirPage=no

[Code]
function GetInstPath(Default: String): String;
begin
  RegQueryStringValue( HKLM, 'SOFTWARE\xxxxx', 'INSTPATH',Result );
end;
离线solan

发帖
80
金钱
800
威望
80
只看该作者 8 发表于: 2016-07-30
回 6楼(lovelost) 的帖子
lovelost:varComMD5: Integer;    ComMD5 := CompareStr(GetMD5OfFile(ExpandConstant('{app}/ abcde.exe')), '56faga4457fa87fda4654f5645afdafddafdaf');//计算文件 MD5 值,并把结果返回给 ComMD5,0 代表相等   if ComMD5  .. (2016-07-29 10:48)

谢谢,校验方法我已经处理好,跟你的差不多。
不过校验的时间有一点长,要10秒左右,感觉不是很好,假如我把校验指令设在安装包打开时进行,这时感觉安装包打开变慢,能不能淡出一个提示框:
正在校验文件的合法性。。。。校验完了就自动退掉,并进入下一步。
离线solan

发帖
80
金钱
800
威望
80
只看该作者 9 发表于: 2016-07-30
回 7楼(lovelost) 的帖子
lovelost:二[Setup]DefaultDirName={code:GetInstPath|{pf}\xxxxx}DisableDirPage=no ....... (2016-07-29 11:12) 

这个效果不是我想要的
因为我的不是升级程序,而是普通的安装程序,效果是这样的,当安装包跟某个文件放一起时,安装路径要设置为(pf)\xxxx,当安装包与另外一个某个文件夹放一起时,安装路径要变成这个文件夹,也就是设为(src),不知道要达到这样的效果代码如何写?