关于asp中使用wscript调用winrar进行压缩文件操作的问题

yuanrong 2005-03-17 04:44:52
如题,程序代码如下:

Set oShell = Server.CreateObject("Wscript.Shell")
sCmd = AppPath & "_cmd.exe /c " & AppPath & "_rar.exe a -ep1 -t -o+ " & Server.Mappath("../temp") & "\" & sFileName &" "& sZipFolder &""
RetCode = oShell.Run(sCmd,1, True) ''执行压缩
Set oShell = Nothing

在我自己的机器上运行正常,没有问题;
但是把程序放到另一台机器上就出错:

错误 '80070002'
/user/slide_tray.asp,行274

其中行274就是"RetCode = oShell.Run(sCmd,1, True)"这一行.

我把_cmd.exe,_rar.exe,wscript.exe的权限都设置了everyone运行,且保存rar的目录为可写,还是有这个错误.
特来请教,急!谢谢!
...全文
171 点赞 收藏 9
写回复
9 条回复
yuanrong 2005年03月19日
1.对方要安装wsh?你是指用户?不需安装。
2.不是什么信任不信任站点的问题。
3.我已放弃使用wsh,使用了国外的一个asp压缩组件,很好用,避免了wsh可能会引起的安全问题,因为我们自己有独立的web服务器。

不过最后还是要谢谢你了。:)
回复 点赞
纪俊 2005年03月18日
如果还是不行就是权限的问题
你手动在控制面板的Internet选项中添加该站点为可信任站点 就OK了!
回复 点赞
纪俊 2005年03月18日
调用实例如下
大家都知道winzip对文件解压和压缩都易如反掌,但是如何通过程序和命令行对其调用呢?
当然winzip的作者已经开发出
WinZip Command Line Support Add-On Version 1.0
大家去可以去http://www.winzip.com/wzcline.htm 下载wzcline.exe!
前提是本机须安装winzip8.0或更高版本的支持,如果你不是winzip8.0,去
http://www.winzip.com/download.htm 下载!

下载后,直接安装就可以!
就会在winzip的目录中产生winzip命令行帮助文件和程序WZZIP.exe,WZUNZIP.EXE。
你可以开始运行里调用:
如:"c:\program files\winzip\wzzip" myfile.zip
也可以拷贝这里两个文件到任意目录下,直接在dos窗口下运行
如:wzzip.exe myfile.zip
你可以在系统的环境变量里加入set path=c:\windows;c:\program files\winzip;
就可以在任何地方不用加入路经调用了!

现在来简单的了解一下帮助中两个命令的基本用法
压缩文件用 WZZIP.exe :
通用格式:wzzip [options] zipfile [@listfile] [files...]
[options]包括:
-a 默认的操作,压缩文件
-a+ 压缩文件,并删除要压缩的文件
-b[drive|path] 是在另外的驱动器上创建临时压缩文件
-d 删除zip文件中指定的目标文件
-e<x|n|f|s|0> 是设置压缩比率,x最大,0最小
-f 替换zip文件中存在的文件
-h|-? 察看帮助
-v 创建一个压缩文件的列表信息
-@list 先创建一个包含所有要解压的文件的文件,然后按所包含的的文件名压缩
...............(其他具体看帮助文件)
[@listfile] 是压缩文件的列表信息纪录
[files...] 则是要压缩的多个文件,用空格隔开,也可以用通配符

例:
压缩当前目录的所有文件
wzzip test.zip *.*
压缩类型为txt的所有文件
wzzip test.zip *.txt
压缩两个文件
wzzip test.zip abc.txt def.txt
压缩类型为txt的所有文件除了abc.txt
wzzip -xABC.TXT test.zip *.txt
压缩D:\docs下的所有类型为txt的文件及子目录
wzzip -rp test.zip d:\docs\*.txt
把zipit.1st里的文件更新到test.zip
wzzip -u test.zip @Zipit.lst
列出一个压缩文件的列表内容
wzzip -v test.zip



解压文件用WZUNZIP.exe :
通过格式:wzunzip [options] zipfile [@listfile] [path] [files...]
[options]包括:
-c[m] 解压是显示文件列表在dos屏幕中
-d 重建zip文件中的目录结构
-f 只解压在zip文件里同目前文件夹存在的同名的文件,如果没有则不解压
-jhrs 忽视zip文件里的文件的隐藏、只读、系统属性
-Jhrs 只解压带有隐藏、只读、系统属性的文件
-n 只解压叫新的文件,如果要解压的文件比已存在的新则替换。
-o 不用通过yes来确定是否要替换文件
-v 创建一个压缩文件的列表信息
-@list 先创建一个包含所有要解压的文件的文件,然后按所包含的的文件名解压
...............(其他具体看帮助文件)
例如:
创建所有文件到当前目录下
wzunzip test.zip
从test.zip中创建abc.txt到当前目录下
wzunzip test.zip abc.txt
创建在test.zip中的目录结构及文件到当前目录下
wzunzip -d test.zip
创建在test.zip中的目录结构及文件到c:\docs下
wzunzip -d test.zip c:\docs从test.zip中创建包含在files.ist中的文件名的文件
wzunzip test.zip @files.lst
显示test.zip的文件列表内容
wzunzip -v test.zip
显示压缩文件中所有类型为txt的文件列表内容
wzunzip -v test.zip *.txt


有了以上的准备,那么我们现在来编写VBS来执行文件解压和压缩就易如反掌了:
''test.vbs
''*********************
''上面用SHELL对象启动程序
''*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")


''test.asp
''*********************
''上面用SHELL对象启动程序
''*********************
<script language="VBScript.Encode" runat=server>
''上面用SHELL对象启动程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run (" c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功执行!"
else
Response.write " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"
end if
</script>


怎么样很简单吧,如果我们再把文件上传和此结合起来,就会产生很多使用的功能。如:
在用上传组件上传多个文件后,可以对其多个文件打包,以提供给其他人zip文件下载
或者上传一个zip文件后,可以利用程序对其解压,以提供给其他人单个文件下载
很方便用户吧!我会在以后的文章里把这两种变化写出来!文中难免有疏漏的地方,请大家多多指正!


以上的例子均在win2000+iis5.0上测试过!
回复 点赞
纪俊 2005年03月18日
对方安装有WSH么

WSH是作为操作系统的一个组件自动安装的,如果不慎丢失了这个组件,可以从依次打开“控制面板-->添加/删除程序-- 〉Windows安装程序--〉附件”,然后将“Windows Scripting Host”前的划上“√”,再确定即可完成WSH组件的安装。
回复 点赞
yuanrong 2005年03月18日
顶~~
回复 点赞
yuanrong 2005年03月17日
谢谢!
不行,按你说的,运行cmd.exe测试权限,执行的时候IE的进度条一点点向前走,无法执行完成.

且任务管理器中的cmd.exe无法结束进程,提示拒绝访问.
回复 点赞
myvicy 2005年03月17日
上面测试你的权限。下面压缩
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")


''test.asp
''*********************
''上面用SHELL对象启动程序
''*********************
<script language="VBScript.Encode" runat=server>
''上面用SHELL对象启动程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run (" c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功执行!"
else
Response.write " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"
end if
</script>
回复 点赞
myvicy 2005年03月17日
<script language="VBScript.Encode" runat=server>
''上面用SHELL对象启动程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功执行!"
else
Response.write " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"
end if
</script>
回复 点赞
yuanrong 2005年03月17日
up~~`:(
回复 点赞
发动态
发帖子
ASP
创建于2007-09-28

1.9w+

社区成员

35.7w+

社区内容

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区公告
暂无公告