找回密码
 加入
搜索
查看: 2329|回复: 10

[AU3基础] 仿制软件安装界面,用imagex写的解压命令无效,不知道问题出在哪里?求助大神

[复制链接]
发表于 2020-4-16 12:08:45 | 显示全部楼层 |阅读模式
本帖最后由 沉默的斗鱼 于 2020-4-16 21:08 编辑

软件界面已做好,但无法实现解压到指定路径。
从论坛找的资料,做了一个软件安装界面,打算用imagex实现解压释放,当然7Z更方便,但我选择用imagex,已知问题是imagex释放到指定路径如果不存在路径文件夹将解压无效。
这个可以不考虑,直接在77文件夹打包文档等到77.Wim,避免无实际路径文件夹解压无效问题。
假设解压到  C:\Program Files\77  ,
imagex的命令为   imagex.exe /apply  22.wim 1   C:\Program Files\77 ,
但我调用变量无法实现解压到指定文件夹,附代码,求助大神支招!

#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_Icon=LOGO.ico
#AutoIt3Wrapper_Outfile=AAA.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Description=XXX安装程序
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=@copyright 2020
#AutoIt3Wrapper_Res_Field=CompanyName|制作
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <ComboConstants.au3>
#include <GUIListView.au3>
#include <ListViewConstants.au3>
FileInstall("logo.jpg", @TempDir & "\logo.jpg", 1)
FileInstall("imagex.exe", @TempDir & "\imagex.exe", 1)
;装入imagex.exe,用于解压安装包。
FileInstall("22.wim", @TempDir & "\22.wim", 1)
;装入22.wim,22.wim是压缩的安装程序。
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("XXXX程序安装", 510, 315, -1, -1)
$Pic1 = GUICtrlCreatePic(@TempDir & "\logo.jpg", 0, 0, 510, 100)
$Label0 = GUICtrlCreateLabel("XXXX程序安装", 56, 14, 404, 45)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor($Label0, $GUI_BKCOLOR_TRANSPARENT)
$Input1 = GUICtrlCreateInput("C:\Program Files\77", 10, 258, 380, 20)
$Group1 = GUICtrlCreateGroup("安装许可协议:", 5, 115, 500, 125)
$Label1 = GUICtrlCreateLabel(" 欢迎使用XXXX程序安装!你能接受吗?" & @CRLF & @CRLF & "欢迎使用XXXX程序安装!你能接受吗?" & @CRLF & @CRLF & "欢迎使用XXXX程序安装!你能接受吗?", 200, 150, 280, 60)
;这里写入协议内容
$Button1 = GUICtrlCreateButton("安装目录(&C)", 405, 255, 100, 25)
GUICtrlSetState($Button1, $GUI_DISABLE)
$Button2 = GUICtrlCreateButton("执行安装(&I)", 405, 285, 100, 25)
GUICtrlSetState($Button2, $GUI_DISABLE)
$Ag = GUICtrlCreateCheckbox("我同意许可协议", 10, 230, 100, 20)
GUICtrlSetState(-1, $GUI_UNCHECKED)
$QQ = GUICtrlCreateLabel("程序:XXXXXXXXXXXXX", 180, 292, 210, 20)
GUICtrlSetColor(-1, 0x008000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Select
                Case $nMsg = $GUI_EVENT_CLOSE
                        FileDelete(@TempDir & "\imagex.exe")
                        FileDelete(@TempDir & "\22.wim")
                        Exit
                Case $nMsg = $Ag
                        If GUICtrlRead($Ag) = $GUI_CHECKED Then
                                GUICtrlSetState($Button1, $GUI_ENABLE)
                        EndIf
                        If GUICtrlRead($Ag) = $GUI_UNCHECKED Then
                                GUICtrlSetState($Button1, $GUI_DISABLE)
                                ;这里调整控件状态。
                        EndIf
                Case $nMsg = $Button1
                        $Search = FileSelectFolder("请选择一个文件夹:", "")
                        ;这里选择安装目录。
                        $Preservation = GUICtrlSetData($Input1, $Search)
                        If StringLen(GUICtrlRead($Input1)) >= 1 Then
                                GUICtrlSetState($Button2, $GUI_ENABLE)
                        EndIf
                Case $nMsg = $Button2
                        RunWait(@ScriptDir & "imagex.exe" & "/apply" & "22.wim" & "1" & $Search, @WindowsDir, @SW_HIDE)
                        
                        ;用到的WIN加压缩命令是    imagex.exe /apply  22.wim 1  C:\Program Files\77     ($Search 代表自定义路径)
                        ;解压预安装文件到安装目录。
                        FileDelete(@TempDir & "\imagex.exe")
                        FileDelete(@TempDir & "\22.wim")
                        If FileExists(@TempDir & "\22.wim") = 0 Then
                                ;这里判断程序包是否存在来判断安装完成。
                                MsgBox(0, "完成", "安装完成 !")
                                Exit
                        EndIf
        EndSelect
WEnd



logo.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2020-4-16 12:23:14 | 显示全部楼层
7z不香吗,哈哈。。。
发表于 2020-4-16 14:11:55 | 显示全部楼层
7z似乎更好吧,安装系统用imagex。
 楼主| 发表于 2020-4-16 18:45:29 来自手机 | 显示全部楼层
bfgxp 发表于 2020-4-16 14:11
7z似乎更好吧,安装系统用imagex。

大神是否可以捕获7z解压进度条?我捕获不到7z解压进度条,但搞定了imagex进度条,所以用的imagex
 楼主| 发表于 2020-4-16 18:59:14 来自手机 | 显示全部楼层
862228699 发表于 2020-4-16 12:23
7z不香吗,哈哈。。。

大神是否可以捕获7z解压进度条?我捕获不到7z解压进度条,但搞定了imagex进度条,所以用的imagex
发表于 2020-4-16 19:14:58 | 显示全部楼层
本帖最后由 bfgxp 于 2020-4-16 19:16 编辑
沉默的斗鱼 发表于 2020-4-16 18:45
大神是否可以捕获7z解压进度条?我捕获不到7z解压进度条,但搞定了imagex进度条,所以用的imagex

我用的是7zg,取运行界面标题的百分比,这是我写的程序的片断
    Dim $7zgx = String($Tpath & "\7zg.exe x " & @ScriptDir & "\" & $vhdos3 & " -o" & $part & "\ -y")
    $7zpid = Run($7zgx, "", @SW_HIDE)
    If $7zpid Then
        GUICtrlSetData($instInfolist, "正在解压VHD系统到目标分区")
        Opt("WinTitleMatchMode", 2)
        Opt("WinDetectHiddenText", 1)
        $hChild = WinWait("Extracting ", "Compression ratio:") ;取窗口句柄
        For $Jdu = 1 To 100
            $pid = ProcessExists($7zpid)
            Switch $pid
                Case $7zpid
                    $SYSJ = ControlGetText($hChild, "", 121)
                    If $SYSJ <> "" Then GUICtrlSetData($Label3, "剩余时间" & @CRLF & $SYSJ)
                    $YYSJ = ControlGetText($hChild, "", 120)
                    If $YYSJ <> "" Then GUICtrlSetData($Label2, "已用时间" & @CRLF & $YYSJ)
                    $JYSD = ControlGetText($hChild, "", 123)
                    If $JYSD <> "" Then GUICtrlSetData($Label4, "解压速度" & @CRLF & $JYSD)
                    $ZJDX = ControlGetText($hChild, "", 122)
                    If $ZJDX <> "" Then GUICtrlSetData($Label5, "总计大小" & @CRLF & $ZJDX)
                    $YJY = ControlGetText($hChild, "", 124)
                    If $YJY <> "" Then GUICtrlSetData($Label6, "已解压" & @CRLF & $YJY)
                    $tilte7z = WinGetTitle($hChild)
                    $tilte7 = StringRegExp($tilte7z, "\d+(?=%)", 3)
                    If IsArray($tilte7) Then
                        GUICtrlSetData($Progress1, $tilte7[0])
                        $Jdu = $tilte7[0]
                        If $tilte7[0] = 100 Then
                            $7zerrors = "VHD系统解压完成"
                            $ee = ControlGetText($hChild, "", 126)
                            If $ee <> "" Then
                                $7zerrors = "提示!解压完成,有如下反馈,但不严重"
                                For $i = 1 To 20 ;$ee
                                    $gettxt = ControlListView($hChild, '', 'SysListView321', 'gettext', $i - 1, 1)
                                    If $gettxt <> "" Then
                                        $7zerrors = $7zerrors & @CRLF & $gettxt
                                    Else
                                        ExitLoop
                                    EndIf
                                Next
                                If StringInStr($7zerrors, ".vhd") Then
                                    $7zerrors = StringReplace($7zerrors, "提示!解压完成,有如下反馈,但不严重", "错误!解压完成,但有严重问题,反馈如下")
                                    $ExER = 1
                                EndIf
                            EndIf
                            GUICtrlSetData($instInfolist, $7zerrors)
                            ProcessClose($pid)
                        EndIf

                    EndIf

                Case 0
                    ;MsgBox(0, "", GUICtrlRead($Label3))
                    If StringRight(GUICtrlRead($Label3), 8) < "00:00:04" Then
                        GUICtrlSetData($Label3, "剩余时间" & @CRLF & "00:00:00")
                        GUICtrlSetData($Label6, StringReplace(GUICtrlRead($Label5), "总计大小", "已解压"))
                        GUICtrlSetData($Progress1, 100)
                        GUICtrlSetData($instInfolist, "VHD系统解压完成")
                    Else
                        GUICtrlSetData($instInfolist, "错误!VHD系统解压进程被意外结束")
                        $ExER = 1
                    EndIf
                    ExitLoop
            EndSwitch
            Sleep(300)
            ;WinWait("dkdkgkddlgfkg", "", 1)
        Next
    Else
        GUICtrlSetData($instInfolist, "错误!解压程序未能启动")
        $ExER = 1
    EndIf


发表于 2020-4-17 14:48:25 | 显示全部楼层

;先新建一个文件夹   C:\Program Files\77  

;用到的WIN加压缩命令是
imagex.exe  apply  22.wim 1  C:\Program Files\77  
发表于 2020-4-17 19:17:53 | 显示全部楼层
1、建议楼主百度一下Imagex的命令行。
2、7z论坛有UDF,可以带进度条。自行搜索。
 楼主| 发表于 2020-4-18 09:39:21 来自手机 | 显示全部楼层
haijie1223 发表于 2020-4-17 19:17
1、建议楼主百度一下Imagex的命令行。
2、7z论坛有UDF,可以带进度条。自行搜索。

发哥好!imagex的命令行没有错,我都测试过的,上楼都市浪子666的错了,apply前面少/了,7z的udf我搜到呢,无奈水平低搞不定,看nsis做的安装界面很炫,我不服气,就想尝试用au3做一个。
 楼主| 发表于 2020-4-18 09:40:31 来自手机 | 显示全部楼层
都市浪子666 发表于 2020-4-17 14:48
;先新建一个文件夹   C:\Program Files\77  

;用到的WIN加压缩命令是

大神好,apply前面不加/是无法实现解压的,这个我用批处理先做过尝试的。
 楼主| 发表于 2020-4-22 20:42:08 | 显示全部楼层
本帖最后由 沉默的斗鱼 于 2020-4-22 20:44 编辑

RunWait(@TempDir & "\imagex.exe /apply " & @TempDir & "\22.wim  1 " & $Search, @ScriptDir, @SW_HIDE)
☆王者之风☆大神帮忙搞定,感谢。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-15 01:50 , Processed in 0.077565 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表