« 如何使用 Access 2000ADO 编程模型的关键元素 »

ASP在线压缩函数

函数需要调用cmd和winrar.exe,一般只能以管理组启动这些程序,合适的权限分配下才能正常使用这个函数。需要使得匿名账户有执行权限,和ntfs文件系统的读写权限。没有自己服务器的还是算了。有些虚拟主机程式是支持解压缩和压缩的,实现的道理类似,无外乎就是winrar的使用。

     要想实现这种功能,首先要得到Rar程序的解压缩核心文件支持(可以下载WinRar软件,再把其中的Rar.exe文件单独“拿”出来。),并且还需要Windows操作系统自带的cmd.exe程序(这个程序用来执行Rar.exe文件。操作系统自带的,NT内核的操作系统可以在操作系统安装目录下的System32文件夹下找到它;Windows 9X的操作系统可以在操作系统安装目录下的System文件夹下找到它。),然后把它们上传到同一目录中。

<%
'描述:只有压缩功能,没有解压功能;需要cmd.exe和Rar.exe两个执行程序
'参数说明:Rar(ByVal CmdDir,ByVal RarNameDir,RarSourceDir)
'CmdDir为cmd.exe和Rar.exe两个执行程序的[共同]存放绝对路径;
'RarNameDir为压缩后保存文件名称,要绝对路径;
'比如:E:\WebSite\Rar\AA\MMGG 那么表示压缩为MMGG.rar,保存在E:\WebSite\Rar\AA\路径下
'RarSourceDir要压缩的[文件]或[文件夹],要绝对路径;
'比如:E:\WebSite\Rar\AA表示压缩名为"AA"的整个文件夹;E:\WebSite\Rar\AA\表示压缩文件夹"AA"里的[所有文件](不包括里面的文件夹)
'******************************************************
Sub Rar(ByVal CmdDir,ByVal RarNameDir,RarSourceDir)
   Dim Cmd,Shell
   Cmd=CmdDir&"cmd.exe /c "&CmdDir&"Rar.exe a  -ep1 -o+ " '// -ep1 -o+分别为两个开关命令具体可参考WinRar的帮助
   Cmd=Cmd&RarNameDir&" "&RarSourceDir
   On Error Resume Next
   Set Shell = Server.CreateObject("WScript.Shell")
   If Err or IsObject(Shell)=False Then
      If Err Then Err.Clear
      Response.Write "没有操作Shell权限..."
      Response.End
   End If
   On Error Resume Next
   Shell.Run Cmd,1,True
   If Err Then
      Err.Clear
      Response.Write "压缩文件时出错,可能没有操作权限"
      Response.End
   End If
End Sub
%>

示例:
<%
Dim CmdDir,RarNameDir,RarSource
CmdDir=Server.MapPath("RAR")&"\" '//cmd.exe和rar.exe存放的路径
RarNameDir=Server.MapPath("AA")&"\MMGG" '//压缩为"MMGG.rar"
RarSourceDir=Server.MapPath("AA")&"" '//将整个"AA"文件夹压缩
Call Rar(CmdDir,RarNameDir,RarSourceDir)
%>

一个错误的解决办法:
Microsoft VBScript 运行时错误 错误 '800a0046'
没有权限

这个是因为cmd.exe和rar.exe没有执行的权限,这是NTFS的权限限制造成的。

自己在cmd终端窗口用cmd /? 什么都一目了然了。C:\>cmd /?
启动 Windows 2000 命令解释器一个新的实例

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      执行字符串指定的命令然后终断
/K      执行字符串指定的命令但保留
/S      在 /C 或 /K 后修改字符串处理(见下)
/Q      关闭回应
/D      从注册表中停用执行 AutoRun 命令(见下)
/A      使向内部管道或文件命令的输出成为 ANSI
/U      使向内部管道或文件命令的输出成为 Unicode
/T:fg   设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON   启用命令扩展(见下)
/E:OFF  停用命令扩展(见下)
/F:ON   启用文件和目录名称完成字符 (见下)
/F:OFF  停用文件和目录名称完成字符(见下)
/V:ON   将 c 作为定界符启动延缓环境变量扩展。如: /V:ON 会
        允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
        在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF  停用延缓的环境扩展。

请注意,如果字符串有引号,可以接受用命令分隔符 '&&' 隔开
的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与
/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其它命令选项。

如果指定了 /C 或 /K,命令选项后的命令行其余部分将作为命令行处
理;在这种情况下,会使用下列逻辑处理引号字符("):

    1.   如果符合下列所有条件,那么在命令行上的引号字符将被
        保留:

        - 不带 /S 命令选项
        - 整整两个引号字符
        - 在两个引号字符之间没有特殊字符,特殊字符为下列中的
          一个: <>()@^|
        - 在两个引号字符之间有至少一个空白字符
        - 在两个引号字符之间有至少一个可执行文件的名称。

    2.  否则,老办法是,看第一个字符是否是一个引号字符,如果
        是,舍去开头的字符并删除命令行上 的最后一个引号字符,
        保留最后一个引号字符之后的文字。

如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找
以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或
两个都存在,这两个变量会先被执行。

 

WshShell.Run
Run 方法创建一个新的进程,该进程以 intWindowStyle 窗口样式执行 strCommand。

语法
WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn])

参数
strCommand
在 strCommand 参数内部的环境变量被自动扩展。

intWindowStyle
这是为新进程在 STARTUPINFO 结构内设置的 wShowWindow 元素的值。其意义与 ShowWindow 中的 nCmdShow 参数相同,可取以下值之一。名称 值 含义
SW_HIDE
0 隐藏窗口并激活另一窗口。
SW_MINIMIZE
6 最小化指定窗口并激活按 Z 序排序的下一个顶层窗口。
SW_RESTORE
9 激活并显示窗口。若窗口是最小化或最大化,则恢复到原来的大小和位置。在还原应用程序的最小化窗口时,应指定该标志。
SW_SHOW
5 以当前大小和位置激活并显示窗口。
SW_SHOWMAXIMIZED
3 激活窗口并以最大化显示该窗口。
SW_SHOWMINIMIZED
2 激活窗口并以最小化显示该窗口。
SW_SHOWMINNOACTIVE
7 最小化显示窗口。活动窗口保持活动。
SW_SHOWNA
8 以当前状态显示窗口。活动窗口保持活动。
SW_SHOWNOACTIVATE
4 按窗口最近的大小和位置显示。活动窗口保持活动。
SW_SHOWNORMAL
1 激活并显示一个窗口。若窗口是最小化或最大化,则恢复到其原来的大小和位置。

原创文章如转载,请注明:转载自悠悠博客 [ http://www.ajaxstu.com/ ]

相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。