找回密码
 加入
搜索
查看: 2034|回复: 11

为什么添加自动复制到软件官理器老是不能自动安装

  [复制链接]
发表于 2010-1-8 15:11:53 | 显示全部楼层 |阅读模式
本帖最后由 追梦虎 于 2010-1-10 10:29 编辑

我把写好的自动复制的文件生成EXE文件,然后添加到软件安装管理器中,当执行时老提示“无法读取文件”,但我不通过软件安装管理器,直接点击,却能复制。我试了深度软件安装管量,雨林木风等都一样,为什么会这样?
发表于 2010-1-8 18:17:02 | 显示全部楼层
没有代码提不出意见.......................
 楼主| 发表于 2010-1-8 19:39:56 | 显示全部楼层
本帖最后由 追梦虎 于 2010-1-8 19:44 编辑
没有代码提不出意见.......................
131738 发表于 2010-1-8 18:17


我一方面用了AU3,一方面引用了批处理,为什么我会这么引用,因为这样写起来比较简单,而之前复制了一个论坛上别人写的自动复制的代码,然后添加到软件安装管器中也不能执行,但直接点击就可以,所以才想了这方法,但却还是不行。
下面的AU3的代码
dircreate("C:\Program Files\Nero Burning Rom 9")
progresson("Nero Burning Rom 9","正在复制Nero Burning Rom 9","己复制0%")
run("nero9.bat","",@SW_HIDE) 
while 1
        $a=dirgetsize("Nero Burning Rom 9")
        $b=dirgetsize("C:\Program Files\Nero Burning Rom 9")
        $x=ceiling($b/$a*100)
        if $x<100 then
                progressset($x,"己复制"&$x&"%")
        elseif $x=100 Then
                progressoff()
                msgbox(0,"","Nero Burning Rom 9复制完成",3)
ENDIF
WEND
我又做了另外一个批处理文件被保存为NERO9.BAT 代码如下
xcopy /s/e  NEROBU~1  C:\progra~1\NEROBU~1
真是苦脑
发表于 2010-1-8 19:48:09 | 显示全部楼层
你用  dircopy好了
然后C:\Program Files用 @ProgramFilesDir代替
 楼主| 发表于 2010-1-8 19:50:42 | 显示全部楼层
你用  dircopy好了
然后C:\Program Files用 @ProgramFilesDir代替
zz999 发表于 2010-1-8 19:48

就是AU3里的DIRCOPY弄了不好,我才会去想DOS下的。没想到也没用,哎。。。。
发表于 2010-1-8 21:45:33 | 显示全部楼层
回复 5# 追梦虎

如果代码完整的话, 这个脚本编译为 .exe 后, 就缺少了 "nero9.bat",

你应用 FileInstall 函数加入这个文件到脚本中....

不知运行脚本时,  "nero9.bat" 在什么地方? 估计是在脚本目录中吧!

你试试看!!!
发表于 2010-1-8 21:46:57 | 显示全部楼层
在 软件安装管器 中不能运行,难道没提示吗?..............
 楼主| 发表于 2010-1-8 22:06:24 | 显示全部楼层
回复  追梦虎

如果代码完整的话, 这个脚本编译为 .exe 后, 就缺少了 "nero9.bat",

你应用 FileInsta ...
131738 发表于 2010-1-8 21:45

"nero9.bat"跟脚本编译为 .exe 在同一个目录下,我直接点击EXE文件是能执行,没有问题,有问题的是我把EXE文件加入软件安装管理,就不能自动复制了,我采用的DOS命令,所以没提示,但试过论坛上的的自动复制代码,像我的一样,直接点EXE没问题,但添加下软件安装管理就提示“无法读取源文件”。
发表于 2010-1-8 22:10:55 | 显示全部楼层
回复 8# 追梦虎

不懂...........................
发表于 2010-1-8 23:32:38 | 显示全部楼层
你的这行代码run("nero9.bat","",@SW_HIDE)改为
Run(@ComSpec & " /c " & "nero9.bat", @ScriptDir, @SW_HIDE)
试一下。

看你的代码,你好像是要做个有进度条的复制代码!
再给你个下面的代码:
; _CopyWithProgress函数将360.exe文件从C盘复制到D盘。
$FileCopy = _CopyWithProgress("C:\360.exe", "D:\360.exe", 2048)

;检查返回代码,看看是否正确复制文件
If $FileCopy = 0 Then
        MsgBox(0,"复制完成", "文件复制成功.")
Else
        MsgBox(16,"复制完成", "文件复制失败.")
EndIf

Func _CopyWithProgress($inSource, $inDest, $ChunkSize = 2048)
        $SourceFile = FileOpen($inSource, 16)

    If $SourceFile = -1 Then
                MsgBox(16, "Error", "无法打开源文件: " & $inSource)
        Exit
    EndIf
    
        $DestFile = FileOpen($inDest, 26)

    If $SourceFile = -1 Then
                MsgBox(16, "Error", "无法打开目标文件: " & $inDest)
        Exit
    EndIf

    $SourceSize = FileGetSize($inSource)

    $Chunks = $SourceSize / $ChunkSize

    ProgressOn("文件复制", "正在复制...", "从: " & $inSource & @LF & "Dest: " & $inDest)

    For $i = 0 to $Chunks
                $Data = FileRead($SourceFile, $ChunkSize)
        FileWrite($DestFile, $Data)
        ProgressSet( (($i + 1) / $Chunks) * 100 )
    Next

    ProgressOff()

    FileClose($SourceFile)

    FileClose($DestFile)

    $DestSize = FileGetSize($inDest)

    If $SourceSize = $DestSize Then
                Return 0
    Else
            Return 1
    EndIf
EndFunc
发表于 2010-1-10 00:22:50 | 显示全部楼层
楼主能发源码全部放出来就容易解决多了!现在你说什么都不懂!
 楼主| 发表于 2010-1-10 10:27:56 | 显示全部楼层
本帖最后由 追梦虎 于 2010-1-10 10:34 编辑

哈哈,我找到原因了,采用kingxy 改的代码Run(@ComSpec & " /c " & "nero9.bat", @ScriptDir, @SW_HIDE)可以在软件安装管量中执行,为什么会不显示我的进度条呢,那是因为源目标$a,我给的路径不对,我给了一个从软件安装管理到安装软件的全目录,它就能执行了。
原先我老以为AU3的EXE文件跟源文件在一起就行,所以$a写成这样dircreate("Nero Burning Rom 9"),而外边的软件安装管量它也要获取路径,所以老不正确,我把它改成dirgetsize("\软件自动安装\软件\Nero\Nero Burning Rom 9")就可以了。
原来这么简单的问题,我居然要想这么久。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2025-1-12 09:49 , Processed in 0.100012 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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