邪恶海盗 发表于 2013-2-7 21:53:29

20130208更新:[带配置文件源码]如何调用光盘/U盘/硬盘上的配置和软件包安装?

本帖最后由 邪恶海盗 于 2013-2-8 17:46 编辑

如题,目的是将该主程序置于封装好的系统部署接口上,将软件置于其它介质上调用,这样对于软件包的更新和修改更方便一些...

尝试根据帮助折腾了一下,首先就发现一个问题,如何找到软件配置文件的路径?
用笨办法DriveGetDrive("all")返回磁盘数量,再用FileFindFirstFile ($var[$i] & "\new\1.ini")断定配置文件是否存在,这里又出现一个问题,如果发现两处配置文件,执行哪个,或者说指定执行先搜索到的该怎么写?

受Qinstall启发到的想法....

20130208更新:#Region AutoIt3Wrapper 预编译参数(常用参数)
#AutoIt3Wrapper_Icon=G:\脚本相关\图标\xehd.ico;图标,支持EXE,DLL,ICO
#AutoIt3Wrapper_OutFile=SWAI.exe   ;输出文件名
#AutoIt3Wrapper_OutFile_Type=exe   ;文件类型
#AutoIt3Wrapper_Compression=9;压缩等级
#AutoIt3Wrapper_UseUPX=y;使用压缩
#AutoIt3Wrapper_Res_Comment=Software Auto Install;注释
#AutoIt3Wrapper_Res_Description=软件自动安装器;详细信息
#AutoIt3Wrapper_Res_Fileversion=0.1.0.2
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=p    ;自动更新版本
#AutoIt3Wrapper_Res_LegalCopyright=邪恶海盗;版权
#EndRegion AutoIt3Wrapper 预编译参数(常用参数)
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("SWAI V0.1", 400, 100, -1, -1, BitOR($WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS))
$Lable1 = GUICtrlCreateLabel("软件自动安装器 V0.1开发版", 5, 5, 390, 15, $SS_CENTER)
GUICtrlSetColor(-1, 0x363636)
$Lable2 = GUICtrlCreateLabel("正在安装", 10, 35, 50, 15)
$Lable3 = GUICtrlCreateLabel("软件名称", 65, 35, 290, 15, $SS_CENTER)
$Lable4 = GUICtrlCreateLabel("", 352, 35, 40, 15, $SS_CENTER)
$Lable5 = GUICtrlCreateLabel("安装进度", 10, 62, 50, 15)
$Lable5 = GUICtrlCreateLabel('按退出', 15, 85, 150, 15)
GUICtrlSetColor(-1, 0x363636)
$Progress1 = GUICtrlCreateProgress(65, 60, 325, 15, $PBS_SMOOTH);进度条
$Lable6 = GUICtrlCreateLabel("By:邪恶海盗   www.hidao.org", 220, 85, 200, 15)
GUICtrlSetColor(-1, 0x363636)
GUISetState(@SW_SHOW)
Local $Drive = DriveGetDrive("all")
For $i = 1 To $Drive
        If FileExists($Drive[$i] & "\SWAI\SWAI.ini") Then
                ExitLoop
        EndIf
Next
Local $var = IniReadSectionNames($Drive[$i] & "\SWAI\SWAI.ini")
If @error Then
        MsgBox(4096, "", "发生错误, 可能没有 INI 文件.")
Else
        For $i1 = 1 To $var
                $Title = IniRead($Drive[$i] & "\SWAI\SWAI.ini", $var[$i1], "Title", "配置文件出错")
                $Name = IniRead($Drive[$i] & "\SWAI\SWAI.ini", $var[$i1], "Name", "配置文件出错")
                GUICtrlSetData($Lable3, $Title)
                GUICtrlSetData($Lable4, "[" & $var[$i1] & "/" & $var & "]")
                GUICtrlSetData($Progress1, $var[$i1] / $var * 100)
                If IniRead($Drive[$i] & "\SWAI\SWAI.ini", $var[$i1], "Hide", "配置文件出错") = "1" Then
                        RunWait($Drive[$i] & "\SWAI" & $Name, @SW_HIDE)
                Else
                        RunWait($Drive[$i] & "\SWAI" & $Name)
                EndIf
        Next
EndIf
请高人指导一下,看是否有执行效率和其它方面的问题,目前发现的问题是当配置文件不存在的时报错并卡死...
待解决的问题:
1.软件安装目录如何自定义?
2.如果程序是.7z等压缩包,可否自动执行自解压?
3.如何实现当软件安装后运行软件目录下的程序?
成品及配置文件:

veket_linux 发表于 2013-2-7 22:46:07

配置文件里 放个时间或版本

比较一下时间或版本 那个更新 用哪个

邪恶海盗 发表于 2013-2-7 22:58:09

回复 2# veket_linux Local $Drive = DriveGetDrive("all")
For $i = 1 To $Drive
        If FileExists($Drive[$i] & "\new\1.ini") Then
                ExitLoop
        EndIf
Next
MsgBox(0, "", IniRead($Drive[$i] & "\new\1.ini", "CC", "DD", "获取文件名失败"))用FileExists,结果只返回第一个,感觉基本符合要求了...
下一步测试读配置文件运行程序...

邪恶海盗 发表于 2013-2-8 17:48:51

在:        If FileExists($Drive[$i] & "\SWAI\SWAI.ini") Then
                ExitLoop
段下加上:        Else
                Exit
解决了无配置文件报错的问题...

其它问题待高人解决...

weeks5 发表于 2013-2-9 17:39:05

来学习看看

邪恶海盗 发表于 2013-2-14 20:43:01

期待高淫指导...
页: [1]
查看完整版本: 20130208更新:[带配置文件源码]如何调用光盘/U盘/硬盘上的配置和软件包安装?