ASP:远程注册自己的组件

来源:互联网 发布:apache poi 编辑:程序博客网 时间:2024/06/15 07:48

让我们先将自己的dll文件通过ftp或http上传到服务器上,然后作一个asp程序,调用WScript.Shell来 执行regsvr32命令:

  1.    Set oShell = CreateObject ("WScript.Shell"
  2.    oShell.Run "c:/WINNT/system32/regsvr32.exe /s d:/xxx.dll", 0, False 

当然如果对方的服务器安全搞的很好的话,这个代码也许就不能用了,但不管怎么样,学习一下 也是好的,:)

 

在这里也要提醒那些出租空间的朋友,你的服务器是否限制了使用WScript.Shell的权限?还是小心为妙!

 

完整代码如下,保存为.asp即可使用:

  1.    <% Response.Buffer = True %> 
  2.    <% Server.ScriptTimeout = 500 
  3.    Dim frmFolderPath, frmFilePath   
  4.    frmFolderPath = Request.Form("frmFolderPath"
  5.    frmFilePath = Request.Form("frmDllPath"
  6.    frmMethod = Request.Form("frmMethod"
  7.    btnREG = Request.Form("btnREG"
  8.    %>  
  9.    <HTML> 
  10.    <HEAD> 
  11.    <TITLE>Regsvr32.asp</TITLE> 
  12.    <STYLE TYPE="TEXT/CSS"
  13.    .Legend {FONT-FAMILY: veranda; FONT-SIZE: 14px; FONT-WEIGHT: bold; COLOR: blue} 
  14.    .FS {FONT-FAMILY: veranda; FONT-SIZE: 12px; BORDER-WIDTH: 4px; BORDER-COLOR: green; 
  15.    MARGIN-LEFT:2px; MARGIN-RIGHT:2px} 
  16.    TD {MARGIN-LEFT:6px; MARGIN-RIGHT:6px; PADDING-LEFT:12px; PADDING-RIGHT:12px} 
  17.    </STYLE> 
  18.    </HEAD>   
  19.   <BODY> 
  20.    <FORM NAME="regForm" METHOD="POST"
  21.    <TABLE BORDER=0 CELLSPACING=6 CELLPADDING=6 MARGINWIDTH=6> 
  22.    <TR> 
  23.    <TD VALIGN=TOP> 
  24.    <FIELDSET ID=FS1 NAME=FS1 CLASS=FS> 
  25.    <LEGEND CLASS=Legend>Regsvr Functions</LEGEND> 
  26.    Insert Path to DLL Directory<BR> 
  27.    <INPUT TYPE=TEXT NAME="frmFolderPath" VALUE="<%=frmFolderPath%>"><BR> 
  28.    <INPUT TYPE=SUBMIT NAME=btnFileList VALUE="Build File List"><BR> 
  29.    <% 
  30.    IF Request.Form("btnFileList") <> "" OR btnREG <> "" Then 
  31.    Set RegisterFiles = New clsRegister 
  32.    RegisterFiles.EchoB("<B>Select File</B>"
  33.    Call RegisterFiles.init(frmFolderPath) 
  34.    RegisterFiles.EchoB("<BR><INPUT TYPE=SUBMIT NAME=btnREG VALUE=" amp; Chr(34) _ 
  35.    amp; "REG/UNREG" amp; Chr(34) amp; ">"
  36.    IF Request.Form("btnREG") <> "" Then 
  37.    Call RegisterFiles.Register(frmFilePath, frmMethod) 
  38.    End IF 
  39.    Set RegisterFiles = Nothing 
  40.    End IF 
  41.    %> 
  42.    </FIELDSET> 
  43.    </TD> 
  44.    </TR> 
  45.    </TABLE> 
  46.    </FORM> 
  47.    </BODY> 
  48.    </HTML> 
  49.    <% 
  50.    Class clsRegister   
  51.    Private m_oFS    
  52.    Public Property Let oFS(objOFS) 
  53.    m_oFS = objOFS 
  54.    End Property   
  55.    Public Property Get oFS() 
  56.    Set oFS = Server.CreateObject("Scripting.FileSystemObject"
  57.    End Property  
  58.    Sub init(strRoot) 'Root to Search (c:, d:, e:)  
  59.    Dim oDrive, oRootDir 
  60.    IF oFS.FolderExists(strRoot) Then 
  61.    IF Len(strRoot) < 3 Then 'Must Be a Drive  
  62.    Set oDrive = oFS.GetDrive(strRoot) 
  63.    Set oRootDir = oDrive.RootFolder 
  64.    Else 
  65.    Set oRootDir = oFS.GetFolder(strRoot) 
  66.    End IF 
  67.    Else 
  68.    EchoB("<B>Folder ( " amp; strRoot amp; " ) Not Found."
  69.    Exit Sub 
  70.    End IF 
  71.    setRoot = oRootDir   
  72.    Echo("<SELECT NAME=" amp; Chr(34) amp; "frmDllPath" amp; Chr(34) amp; ">"
  73.    Call getAllDlls(oRootDir) 
  74.    EchoB("</SELECT>"
  75.    BuildOptions 
  76.    End Sub
  77.    
  78.       Sub getAllDlls(oParentFolder) '??fso?????dll?ocx?? 
  79.    Dim oSubFolders, oFile, oFiles 
  80.    Set oSubFolders = oParentFolder.SubFolders 
  81.    Set opFiles = oParentFolder.Files   
  82.    For Each oFile in opFiles 
  83.    IF Right(lCase(oFile.Name), 4) = ".dll" OR Right(lCase(oFile.Name), 4) = ".ocx" Then 
  84.    Echo("<OPTION VALUE=" amp; Chr(34) amp; oFile.Path amp; Chr(34) amp; ">" _ 
  85.    amp; oFile.Name amp; "</Option>"
  86.    End IF 
  87.    Next   
  88.    On Error Resume Next 
  89.    For Each oFolder In oSubFolders 'Iterate All Folders in Drive 
  90.    Set oFiles = oFolder.Files 
  91.    For Each oFile in oFiles 
  92.    IF Right(lCase(oFile.Name), 4) = ".dll" OR Right(lCase(oFile.Name), 4) = ".ocx" Then 
  93.    Echo("<OPTION VALUE=" amp; Chr(34) amp; oFile.Path amp; Chr(34) amp; ">" _ 
  94.    amp; oFile.Name amp; "</Option>"
  95.    End IF 
  96.    Next 
  97.    Call getAllDlls(oFolder) 
  98.    Next 
  99.    On Error GoTo 0 
  100.    End Sub   
  101.    Sub Register(strFilePath, regMethod) 
  102.    Dim theFile, strFile, oShell, exitcode 
  103.    Set theFile = oFS.GetFile(strFilePath) 
  104.    strFile = theFile.Path   
  105.    Set oShell = CreateObject ("WScript.Shell")   
  106.    IF regMethod = "REG" Then 'Register 
  107.    oShell.Run "c:/WINNT/system32/regsvr32.exe /s " amp; strFile, 0, False 
  108.    exitcode = oShell.Run("c:/WINNT/system32/regsvr32.exe /s " amp; strFile, 0, False
  109.    EchoB("regsvr32.exe exitcode = " exitcode) 
  110.    Else 'unRegister 
  111.    oShell.Run "c:/WINNT/system32/regsvr32.exe /u/s " amp; strFile, 0, False 
  112.    exitcode = oShell.Run("c:/WINNT/system32/regsvr32.exe /u/s " amp; strFile, 0, False
  113.    EchoB("regsvr32.exe exitcode = " exitcode) 
  114.    End IF   
  115.    Cleanup oShell 
  116.    End Sub   
  117.    Sub BuildOptions 
  118.    EchoB("Register: <INPUT TYPE=RADIO NAME=frmMethod VALUE=REG CHECKED>"
  119.    EchoB("unRegister: <INPUT TYPE=RADIO NAME=frmMethod VALUE=UNREG>"
  120.    End Sub   
  121.    Function Echo(str) 
  122.    Echo = Response.Write(str amp; vbCrLf) 
  123.    End Function   
  124.    Function EchoB(str) 
  125.    EchoB = Response.Write(str amp; "<BR>" amp; vbCrLf) 
  126.    End Function   
  127.    Sub Cleanup(obj) 
  128.    If isObject(obj) Then 
  129.    Set obj = Nothing 
  130.    End IF 
  131.    End Sub   
  132.    Sub Class_Terminate() 
  133.    Cleanup oFS 
  134.    End Sub 
  135.    End Class 
  136.    %>
原创粉丝点击