为什么添加自动复制到软件官理器老是不能自动安装
本帖最后由 追梦虎 于 2010-1-10 10:29 编辑我把写好的自动复制的文件生成EXE文件,然后添加到软件安装管理器中,当执行时老提示“无法读取文件”,但我不通过软件安装管理器,直接点击,却能复制。我试了深度软件安装管量,雨林木风等都一样,为什么会这样? 没有代码提不出意见....................... 本帖最后由 追梦虎 于 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真是苦脑 你用dircopy好了
然后C:\Program Files用 @ProgramFilesDir代替 你用dircopy好了
然后C:\Program Files用 @ProgramFilesDir代替
zz999 发表于 2010-1-8 19:48 http://www.autoitx.com/images/common/back.gif
就是AU3里的DIRCOPY弄了不好,我才会去想DOS下的。没想到也没用,哎。。。。 回复 5# 追梦虎
如果代码完整的话, 这个脚本编译为 .exe 后, 就缺少了 "nero9.bat",
你应用 FileInstall 函数加入这个文件到脚本中....
不知运行脚本时,"nero9.bat" 在什么地方? 估计是在脚本目录中吧!
你试试看!!! 在 软件安装管器 中不能运行,难道没提示吗?.............. 回复追梦虎
如果代码完整的话, 这个脚本编译为 .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没问题,但添加下软件安装管理就提示“无法读取源文件”。 回复 8# 追梦虎
不懂........................... 你的这行代码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 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]