追梦虎 发表于 2010-1-8 15:11:53

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

本帖最后由 追梦虎 于 2010-1-10 10:29 编辑

我把写好的自动复制的文件生成EXE文件,然后添加到软件安装管理器中,当执行时老提示“无法读取文件”,但我不通过软件安装管理器,直接点击,却能复制。我试了深度软件安装管量,雨林木风等都一样,为什么会这样?

131738 发表于 2010-1-8 18:17:02

没有代码提不出意见.......................

追梦虎 发表于 2010-1-8 19:39:56

本帖最后由 追梦虎 于 2010-1-8 19:44 编辑

没有代码提不出意见.......................
131738 发表于 2010-1-8 18:17 http://www.autoitx.com/images/common/back.gif

我一方面用了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/eNEROBU~1C:\progra~1\NEROBU~1真是苦脑

zz999 发表于 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 http://www.autoitx.com/images/common/back.gif
就是AU3里的DIRCOPY弄了不好,我才会去想DOS下的。没想到也没用,哎。。。。

131738 发表于 2010-1-8 21:45:33

回复 5# 追梦虎

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

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

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

你试试看!!!

131738 发表于 2010-1-8 21:46:57

在 软件安装管器 中不能运行,难道没提示吗?..............

追梦虎 发表于 2010-1-8 22:06:24

回复追梦虎

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

你应用 FileInsta ...
131738 发表于 2010-1-8 21:45 http://www.autoitx.com/images/common/back.gif
"nero9.bat"跟脚本编译为 .exe 在同一个目录下,我直接点击EXE文件是能执行,没有问题,有问题的是我把EXE文件加入软件安装管理,就不能自动复制了,我采用的DOS命令,所以没提示,但试过论坛上的的自动复制代码,像我的一样,直接点EXE没问题,但添加下软件安装管理就提示“无法读取源文件”。

131738 发表于 2010-1-8 22:10:55

回复 8# 追梦虎

不懂...........................

kingxy 发表于 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

hzxymkb 发表于 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")就可以了。
原来这么简单的问题,我居然要想这么久。
页: [1]
查看完整版本: 为什么添加自动复制到软件官理器老是不能自动安装