红女巫吧 关注:49贴子:1,108
  • 8回复贴,共1
Scripting.FileSystemObject对象
2008/06/01 11:59    [asp学习 ]   '定义组件
Dim objMyFSO
Set objMyFSO = Server.CreateObject(“Scripting.FileSystemObject”)
FileSystemObject对象提供一个属性和一系列方法
1、属性:
FileSystemObject对象只有一个属性,它用于得到当前机器上的所有有效驱动器的列表.
Drivers              说明:返回计算机可用的驱动器列表
2、方法:
FileSystemObject对象提供了使用从属对象的一系列方法,从属对象包括Drive、Folder和File等对象。它也实现了用于TextStream对象的两个方法:CreateTextFile和OpenTextFile。根据所使用的对象的类型,将方法划分为三类。
(1)     与驱动器有关的方法
与驱动器有关的方法如下所示:
驱动器有关的方法及说明:
方 法
说 明
DriveExists(drivespec)
如果在drivespec中指定的驱动器存在,则返回True,否则返回False。drivespec参数可以是一个驱动器字母,或者是文件、文件夹的完整绝对路径
GetDrive(drivespec)
返回drivespec指定的驱动器所对应的Drive对象。drivespec可以包含冒号、路径分隔符或者是网络共享名,即:“C”、“C:”、“C:”及“\machinesharename”
GetDriveName(drivespec)
用字符串返回drivespec指定的驱动器的名称。drivespec参数必须是文件或文件夹的绝对路径,或者仅仅是驱动器字母,例如:“c:”或“c”
(2)     与文件夹有关的方法
与文件夹有关的方法如表5-6所示:
表5-6   与文件夹有关的方法及说明
方 法
说 明
BuildPath(path,name)
在已有的路径path上增添名字为name的文件或文件夹,如果需要,则增添路径分隔符’’
CopyFolder(source,destination,overwrite)
从指定的源文件夹source(可以包含通配符)中复制一个或多个文件夹到指定的目标文件夹destination,包含了源文件夹中的所有文件。如果source包含通配符或destination末尾是路径分隔符(‘’),那么认为destination是要放置源文件夹的拷贝的文件夹。否则的话,认为destination是要创建的新文件夹的路径名。如果destination文件夹已经存在且overwrite参数设置为False,将产生错误,缺省的overwrite参数是True
CreateFolder(foldername)
创建一个路径名为foldername的文件夹。如果foldername已经存在将产生错误
DeleteFolder(folderspec,force)
删除由folderspec指定的一个或多个文件夹(可以在路径的最后部分包含通过配符)及文件夹中的所有内容。如果可选的force参数设置为true,那么即使文件夹包含的文件具有只读属性,也将删除该文件夹。缺省的force参数是False
FolderExist(folderspec)
如果folderspec指定的文件夹存在则返回True,否则返回False。folderspec参数可以包含文件夹的绝对或相对路径,或者仅仅是当前文件夹中看到的文件夹名
GetAbsolutePathName(pathspec)
返回明确指定文件夹的路径,其中要考虑到当前文件夹的路径。例如,如果当前文件夹是“c:docssales”,而pathspec是“jan”,返回的字符是“c:docssalesjan”。通配符、”..”和”\”路径操作符都是可以接受的
GetFolder(folderspec)
返回folderspec指定的文件夹对应的Folder对象。folderspec可以是文件夹的相对的或绝对的路径
GetParentFolderName(pathspec)
返回pathspec文件或文件夹的上一级文件夹。不检验该文件夹是否存在
GetSpecialfolder(folderspec)
返回一个特定的Windows文件夹相对应的Folder对象。参数folderspec的允许值是WindowsFolder(0)、SystemFolder(1)和TemporaryFolder(2)



1楼2010-09-27 09:15回复

    MoveFolder(source,destination)
    将source指定的一个或多个文件夹移动到destination指定的文件夹。在source里可以包含通配符,但在destination中不行。如果source包含通配符或destination末尾是路径分隔符(‘’),则认为destination是要放置源文件夹的文件夹,否则认为它是一个新文件夹的完整路径和名字。如果目的文件夹destination已经存在则产生错误
    (3)     与文件有关的方法
    与文件有关的方法如表5-7所示:
    方 法
    说 明
    CopyFile(source,destination,
    overwrite)
    将source(可包含通配符)指定的一个或多个文件复制到指定的目标文件夹destination。如果source包含通配符或destination末尾是路径分隔符(‘’),那么认为destination是文件夹。否则认为destination为一新文件的完全路径和名称。如果目标文件夹已经存在且overwrite参数设置为False,将产生错误。缺省的overwrite参数是True
    CreateTextFile(filename,overwrite,
    unicode)
    用指定的文件名filename在磁盘上创建一个新的文本文件,并返回与其对应的TextStream对象,如果可选的overwrite参数设置为True,则覆盖同一路径下已有的同名文件。缺省的overwrite参数是False。如果可选的unicode参数设置为True,则该文件的内容将存储为Unicode文本,缺省的unicode参数是False
    DeleFile(filespec,force)
    删除由filespec指定的一个或多个文件(可以在路径的最后部分包含通配符)。如果可选的force参数设置为true,那么也删除具有只读属性的文件。缺省的force参数是False
    FileExists(filespec)
    如果filespec指定的文件存在则返回True,否则返回False。filespec参数可以包含文件的绝对路径或相对路径,或者是当前文件夹中的文件名
    GetBaseName(filespec)
    返回filespec指定的文件的名称,即包含文件路径但去掉了文件的扩展名
    GetExtensionName(filespec)
    返回filespec指定的文件的扩展名
    GetFile(filespec)
    返回filespec指定的文件所对应的File对象。可以指定文件的相对或绝对路径
    GetFileName(pathspec)
    返回pathspec指定的文件的路径或文件名,如果没有文件名就返回最后的文件夹名。不检查该文件或文件夹是否存在
    GetTempName()
    返回一个随机产生的文件名,用于完成运算所需的临时文件或文件夹
    MoveFile(source,destination)
    将source指定的一个或多个源文件移动到destination指定的目的文件夹。在source里可以包含通配符,但destination不行。如果source包含通过配符或destination末尾是路径分隔符(‘’),那么认为destination是一文件夹。否则,认为destination是一新文件夹的完整路径和名称。如果目的文件夹已经存在则产生错误
    OpenTextFile(filename,iomode,create,
         format)
    创建一个名叫做filename的文件,或打开一个现有的名为filename的文件,并且返回一个与其相关的TextStream对象。filename参数可以包含绝对或相对路径。iomode参数指定了所要求的访问类型。允许的数值是ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。当写入或追加到一个不存在的文件时,如果create参数设置为true,就将创建一个新文件。缺省的create参数是False。format参数说明对文件读或写的数据格式。允许数值是:TristatetFalse(0)(缺省),按照ASCII格式打开;TristatetTrue(-1),按照Unicode格式打开;TristateDefault(-2),用系统缺省格式打开
            Unicode文件使用两个字节标识每个字符,取消了ASCII字符最多256个的限制。
    3、解释实例:
         一、DriveExists方法:
            下面是使用FileSystemObject对象的简单例子,它使用DriveExists方法得到现有的驱动器字母的列表:
    


    2楼2010-09-27 09:15
    回复
      2025-06-07 05:39:28
      广告
              ‘ In VBScript
              Set objFSO = Server.CreateObject(“Scripting.FileSystemObject”)
              For intCode = 65 To 90                 ‘ANSI codes for ‘A’ to ‘Z’
                     strLetter = Chr(intCode)
                     If objFSO.DriveExists(strLetter) Then
                            Response.Write “Found drive “ & strLetter & “:<BR>”
                     End If
              Next
         二、 Drive对象
      正如已经看到的,FileSystemObject对象包含一个属性--Drives,它返回一个包括本地计算机上所有可用驱动器的**。
      Drives**里的每个条目是一个Drive对象。Drive对象的属性如表5-8所示:
      表5-8   Drive对象的属性及说明
      属 性
      说 明
      AvailableSpave
      考虑了帐户定额和/或其他限制,返回驱动器上对于该用户可用的空间的大小
      DriveLetter
      返回驱动器的字母
      DriveType
      返回驱动器的类型。返回值可以是Unknown(0)、Removeable(1)、Fixed(2)、Network(3)、CDRom(4)和RamDisk(5)。然而需要注意的是当前版本的scrrun.dll不支持预定义常数Network,必须使用十进制3来代替
      FileSystem
      返回驱动器文件系统的类型。返回值包括“FAT”、“NTFS”和“CDFS”
      FreeSpace
      返回驱动器上可用剩余空间的总量
      IsReady
      返回一个布尔值表明驱动器是否已准备好
      Path
      返回一个由驱动器字母和冒号组成的驱动器路径,即“C:”
      RootFolder
      返回代表的驱动器根目录文件夹的Folder对象
      SerialNumber
      返回一个用于识别磁盘卷的十进制的序列号
      ShareName
      如果是一个网络驱动器,返回该驱动器的网络共享名
      TotalSize
      返回驱动器的总容量(以字节为单位)
      VolumeName
      设定或返回本地驱动器卷名
              因此,通过使用Drives**里的Drive对象,可以在服务器上产生一个驱动器列表,与通过检查每个可能的驱动器字母来判别驱动器是否存在的方法相比,效率更高。我们也可以得到关于该驱动器的信息。在VBScript里,代码如下:
      ' In VBScript:
      ' create a FileSystemObject instance
      Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
      ' create a Drives collection
      Set colDrives = objFSO.Drives
      ' iterate through the Drives collection
      For Each objDrive in colDrives
         Response.Write "DriveLetter: <B>" & objDrive.DriveLetter & "</B>    "
         Response.Write "DriveType: <B>" & objDrive.DriveType
         Select Case objDrive.DriveType
           Case 0: Response.Write " - (Unknown)"
           Case 1: Response.Write " - (Removable)"
           Case 2: Response.Write " - (Fixed)"
           Case 3: Response.Write " - (Network)"
           Case 4: Response.Write " - (CDRom)"
           Case 5: Response.Write " - (RamDisk)"
         End Select
         Response.Write "</B>    "
      If objDrive.DriveType = 3 Then
           If objDrive.IsReady Then
             Response.Write "Remote drive with ShareName: <B>" & objDrive.ShareName & "</B>"
           Else
      Response.Write "Remote drive - <B>IsReady</B> property returned_<B>False</B><BR>"
           End If
         Else If objDrive.IsReady then
           Response.Write "FileSystem: <B>" & objDrive.FileSystem & "</B>    "
           Response.Write "SerialNumber: <B>" & objDrive.SerialNumber & "</B><BR>"
      Response.Write "Local drive with VolumeName: <B>" & _
      objDrive.VolumeName & "</B><BR>"
      Response.Write "AvailableSpace: <B>" & FormatNumber( _
      objDrive.AvailableSpace / 1024, 0) & "</B> KB    "
      Response.Write "FreeSpace: <B>" & FormatNumber( _
      objDrive.FreeSpace / 1024, 0) & "</B> KB    "
      Response.Write "TotalSize: <B>" & FormatNumber(_
      objDrive.TotalSize / 1024, 0) & "</B> KB"
         End if  
         Response.Write "<P>"
         End if
      Next
              注意:不能用预定义常数Network比较驱动器的DriveType属性,因为(至少在scrrun.dll的当前版本中)在类型库中省略了Network常数,因此不再作为公用的常数使用。
      


      3楼2010-09-27 09:15
      回复
        http://blog.myspace.cn/e/401249964.htm


        4楼2010-09-27 09:18
        回复
          http://blog.sina.com.cn/s/blog_4b3419a20100gzma.html
          javascript取得机器名,用户名,读写注册表,启动应用程序
          //javascript有个特殊的对象ActiveXObject,通过它可以访问windows的本地文件系统和应用程序,
          比如:有的时候我们需要得到用户的机器名,用户名,得到某个文件的信息,或者读写注册表,或者启动计算器、outlook等应用程序。
          下面是一些常用的方法,每个都经过了测试。
          <script language="JavaScript">
          //取得机器名,登录域及登录用户名
          function getusername()
          {
          var WshNetwork = new ActiveXObject("WScript.Network");
          alert("Domain = " + WshNetwork.UserDomain);
          alert("Computer Name = " + WshNetwork.ComputerName);
          alert("User Name = " + WshNetwork.UserName);
          }
          //取得系统目录
          function getprocessnum()
          {
                   var pnsys=new ActiveXObject("WScript.shell");
                   pn=pnsys.Environment("PROCESS");
                   alert(pn("WINDIR"));
          }
          //返回系统中特殊目录的路径
          function getspecialfolder()
          {
               var mygetfolder=new ActiveXObject("WScript.shell");
               if(mygetfolder.SpecialFolders("Fonts")!=null)
               {
                   alert(mygetfolder.SpecialFolders("Fonts"));
                }
          }
          //取得磁盘信息 传入参数如:getdiskinfo('c')
          function getdiskinfo(para)
          {
               var fs=new ActiveXObject("scripting.filesystemobject");
               d=fs.GetDrive(para);
               s="卷标:" + d.VolumnName;
               s+="------" + "剩余空间:" + d.FreeSpace/1024/1024 + "M";
               s+="------" + "磁盘序列号:" + d.serialnumber;
               alert(s)
          }
          //取得系统目录
          function getprocessnum()
          {
                   var pnsys=new ActiveXObject("WScript.shell");
                   pn=pnsys.Environment("PROCESS");
                   alert(pn("WINDIR"));
          }
          //启动计算器
          function runcalc()
          {
               var calc=new ActiveXObject("WScript.shell");
               calc.Run("calc");
          }
          //读取注册表中的值
          function readreg()
          {
               var myreadreg=new ActiveXObject("WScript.shell");
               try{
                   alert(myreadreg.RegRead              ("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\NeroCheck"));
                }
               catch(e)
               {
                   alert("读取的值不存在!");
                }
          }
          //写注册表
          


          5楼2010-09-27 09:30
          回复
            function writereg()
            {
                 var mywritereg=new ActiveXObject("WScript.shell");
                 try{
                     mywritereg.RegWrite("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\MyTest","c:\\mytest.exe");
                     alert("写入成功!");
                  }
                 catch(e)
                 {
                     alert("写入路径不正确!");
                  }
            }
            //删除注册表
            function delreg()
            {
                 var mydelreg=new ActiveXObject("WScript.shell");
                 if(confirm("是否真的删除?"))
                 {
                     try{
                 mydelreg.RegDelete("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\MyTest");
                 alert("删除成功!");
            }
            catch(e)
            {
                 alert("删除路径不正确");
            }
                  }
            }
            //取得文件信息     调用方式如:getfileinfo('c:\\test.pdf')
            function getfileinfo(para)
            {
                 var myfile=new ActiveXObject("scripting.filesystemobject");
                 var fi=myfile.GetFile(para);
                 alert("文件类型:"+fi.type+"文件大小:"+fi.size/1024/1024+"M"+"最后一次访问时间:"+fi.DateLastAccessed);
            }
            //取得客户端的信息
            function clientInfo()
            {
                 strClientInfo="availHeight=       "+window.screen.availHeight+"\n"+
            "availWidth=       "+window.screen.availWidth+"\n"+
            "bufferDepth=       "+window.screen.bufferDepth+"\n"+
            "colorDepth=       "+window.screen.colorDepth+"\n"+
            "colorEnable=       "+window.navigator.cookieEnabled+"\n"+
            "cpuClass=       "+window.navigator.cpuClass+"\n"+
            "height=       "+window.screen.height+"\n"+
            "javaEnable=       "+window.navigator.javaEnabled()+"\n"+
            "platform=       "+window.navigator.platform+"\n"+
            "systemLanguage=       "+window.navigator.systemLanguage+"\n"+
            "userLanguage=       "+window.navigator.userLanguage+"\n"+
            "width=       "+window.screen.width;
                 alert(strClientInfo);   
            }
            </script>
            


            6楼2010-09-27 09:30
            回复

              ActiveX组件及其注册一.概述
                 在接下来的部分,首先将就ActiveX组件的概念以及它的分类进行简要的介绍,从而让读者对ActiveX组件有一个概念上的把握。随后,将就如何注册ActiveX组件的问题进行比较深入详细的解释。分别给出ActiveX 控件、ActiveX DLL、ActiveX EXE的具体注册方法。并在此基础上,对如何在制作安装程序并安装后,实现对 ActiveX组件的注册给出了若干解决方案。
              二.ActiveX组件的概念
                 在我们平常的阅读和编程学习中,我们经常可以看到诸如“ActiveX控件”,“ActiveX组件”等名词。那么什么是“ActiveX控件”,什么是“ActiveX组件”呢,它们有什么区别呢?
                 首先,我们应该知道,组件是建立在 ActiveX技术上的代码的独立单元,用于通过特定的接口提供特定的一组服务。它提供客户端在运行时所请求的对象。在 Remote Data Service 中,当组件包括支持业务进程的关键字逻辑时也被称为“业务对象”。
                 其次,ActiveX是使软件组件能够在网络环境中交互作用而与创建组件的语言无关的一套封装技术。实现ActiveX 的基础是“组件对象模型”(Component Object Model ,缩写为COM)。它也是提供封装 COM组件并将其置入应用程序(如(但不限于)Web 浏览器)的一种方法。
                 最后,上面一段话中提到的COM(Components Object Model)是软件组件互相通讯的一种方式。它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要该操作系统支持 COM),也不管该组件是用什么语言编写的。COM 还提供了位置透明性:在编写组件时,其他组件是进程内 DLL、本地 EXE 还是位于其他计算机上的组件,都不会产生太大影响。
                 这样以来,我们可以给ActiveX组件(ActiveX component)一个定义,就是:一个应用程序或开发工具,可以使用另一个应用程序支持的对象,或者提供自己的对象供另一个应用程序使用。以前这些程序和对象称为“OLE 自动服务程序”和“OLE 自动服务器”。
                 至于ActiveX控件,则只是ActiveX组件的一个分类,是一个标准的用户接口元素,是具有 .OCX 文件扩展名或者可插入对象的文件,能够快速地把窗体和对话框组装起来;当使用自定义控件对话框将其增加到工程中去时,工具箱将被扩展。在以前ActiveX控件被称作 OLE 控件。ActiveX 控件还使 Internet 更加生动,为 World Wide Web 页增加了有趣的新功能。
              三.ActiveX组件的分类
                 ActiveX组件可以分为三类:
                 ● ActiveX控件
                 ● ActiveX文档
                 ● 代码成分(OLE自动服务器)
                 (1)ActiveX控件
                 可以从无到有被用户完全建立,它能被建立在另一个控件之上,或者它可容纳多个已经有的控件。比如 VB中的ActiveX控件就是建立在VB的用户控件对象上的。当创建一个ActiveX控件时,就创建了一个带有扩展名为 .ctl 的控件类文件。我们通常使用这种文件来创建实际的控件,其扩展名为 .ocx 。
                 (2)ActiveX文档
                 通常,在具体的编程环境如VB 、VC++中,可以用传统文档的语义学来创建完全的应用程序。换句话说,它不仅有应用程序的功能,而且还有文档性能的灵活性 — 当用户打开一个 ActiveX文档时,将不仅拥有应用程序的全部功能,而且能保持和发布应用程序原有数据的“备份”,因而,“文档”实际上是主动的。比如, VB的ActiveX文档是建立在VB用户文档的基础上的。创建一个ActiveX文档时,用带有扩展名 .dob 的文件保存。VB使用这种DOB文件来创建EXE或DLL文件,这种EXE或DLL文件可以为ActiveX文挡提供实际的代码。另外VB生成一个带扩展名 .vbd 的说明文件,它对ActiveX文档进行描述,用主应用程序可以打开这个文件。对于ActiveX文档,可以让用户保存数据,这些数据被存在VBD文件里。
              


              7楼2010-09-27 09:32
              回复
                   如果想要解除对某一个ActiveX 控件的注册,只需要在regsvr32后面加一个参数“/u”,即 <被注册过的ActiveX 控件文件名> 。
                   (2)利用某些编程环境中的浏览功能。比如在VB6.0中可以点击界面上的“工程”,在弹出的下拉菜单中,点击“部件”一项,随后出现了一个新的界面。在此界面上利用“浏览”按钮,找到并选中需要注册的控件,确定后便注册到“部件”界面的“控件”栏里。
                利用上面两种方法进行控件注册后,便可以让部件开发人员在实际的编程中,使用该控件了。
                   (3)使用安装程序制作软件——InstallShield 。使用 Regsvr32.exe 程序来注册ActiveX 控件,以及利用“浏览”来注册,虽然简单,但是都需要手工注册,在不用时,还需要手工解除,所以对于一个使用了该控件的应用程序来说并不实用。一般大型的应用软件都需要一个安装程序,在安装程序中解决ActiveX 控件注册就非常实用了。使用InstallShield可以制作出专业级的安装程序,还可以注册其中的ActiveX 控件;而且卸载软件时,可以自动注销以前注册的ActiveX 控件。其做法就是按照InstallShield 的向导,进行安装程序的制作,在进行到最后一步,点击“Finish”后,“InstallShield”将进行下一步的“详细定制”。选择“File Groups”选项,将其中包含需要自注册ActiveX控件文件项的“Self-Registered”属性改为“yes”.
                   (4)安装过程中的自注册。 ActiveX控件在安装的时候必须被注册,方可以在应用程序中被调用。往往利用编程工具自带的安装制作工具可以达到这个目的。仍以VB6.0为例。利用VB6.0本身自带的创建安装程序的工具软件:Package & Deployment Wizard。只要将ActiveX控件包含在发布的文件中间,Package & Deployment Wizard将根据需要自动将该控件打成自注册文件的属性。万一,我们没有成功的话,可以修改安装程序的安装文件列表 setup.lst。将相应宏中的参数设置为DLLSelfRegister。如果不需要自注册,可以将该项删除(注意逗号要保留)。
                例如下面是作者自己编的一个ActiveX控件,利用上述方法创建安装程序后,其后面的参数变为:
                   [Setup1 Files]
                   File1=@clock1.ocx,$(WinSysPath),$(DLLSelfRegister),$(Shared),2/19/01 9:27:30 AM,36864,1.0.0.0
                   其中,加粗的一项 $(DLLSelfRegister) 就是标明自注册的宏参数设置。可以手工加或删。
                   (5)补充一点。有些公司开发的ActiveX控件注册需要利用附带的专门的工具软件。运行该工具,就可以将相应的ActiveX控件注册。这仍然属于手工注册,这些ActiveX控件被发布时,一般享有版权,同时会有专门的说明。
                   2.ActiveX DLL的注册
                   ActiveX DLL的注册与ActiveX控件的注册基本上相似,上述用于ActiveX控件注册的方法基本都适用于ActiveX DLL的注册。在此可以参照上述有关ActiveX控件注册的方法进行注册。
                   3.ActiveX EXE的注册
                   作为一种进程外运行的组件,ActiveX EXE的注册方法异于ActiveX控件和ActiveX DLL的注册,并且在运用中有一定的难度。在此,将它们的注册方法总结如下:
                   (1)“浏览”的方法。以VB6.0为例。在VB6.0编程界面上,进入“工程”,在弹出的下拉菜单中间选择“引用”,然后在出现的新界面上点击“浏览”,找到并选中需要注册的组件,确定后,便可以在列表中间看到对应项了。
                   (2)直接运行的方法。注册进程外组件ActiveX EXE时,只要在VB6.0的环境中运行一下该组件代码,便可以实现注册了。这时ActiveX EXE的信息被加入到Windows注册表中。但是,必须注意,此信息只是在VB开发环境中运行此程序时被临时加入。当程序停止时,有关如何访问这些对象的信息便从系统中清除掉。
                


                9楼2010-09-27 09:32
                回复
                  2025-06-07 05:33:28
                  广告
                     (3)利用安装制作工具。比如在VB6.0中,可以利用VB6.0本身自带的创建安装程序的工具软件:Package & Deployment Wizard。在创建安装程序的过程中,自动将其变为自注册。若不然,同样可以修改安装程序的安装文件列表 setup.lst。将相应宏中的参数设置为EXESelfRegister。如果不需要自注册,可以将该项删除(注意逗号要保留)。
                     例如下面是作者自己编的一个进程外组件 ,利用上述方法创建安装程序后,其后面的参数变为:
                     [Setup1 Files]
                     File1=@CommThread.exe,$(WinSysPath),$(EXESelfRegister),$(Shared),12/25/00 8:47:44 PM,57344,1.0.0.0
                     其中,加粗的一项 $(EXESelfRegister) 就是标明自注册的宏参数设置。可以手工加或删。
                     (4)如果打算把进程外服务器安装到另外一台机器上自注册,而且脱离编程环境时,可以先将文件拷贝到另外机器上,执行时在命令行上加上参数 “ /regserver”,如果取消注册,可以在命令行上加上“ /unregserver”。使用 /regserver命令选项注册进程外COM服务器时,可以不去理会手工启动时程序工作的正常方式。Sub Main或Class_Initialize程序都不会被调用,只有由当该编程环境包括在EXE文件中的注册逻辑才会运行。
                  六.总结
                     上面,就日常的学习中所理解的有关ActiveX 组件方面的概念性的东西,作了一些简单的总结。在,注册方面,给出了一些较为实用的方法。当然,我们也可以自己动手,亲自编制一些小程序,实现ActiveX 控件的注册。如在VC++中,使用Windows API函数LoadLibrary载入ActiveX控件;再使用GetProcAddress函数获取ActiveX 控件中注册函数DLLRegisterServer(注销函数为DLLUnRegisterServer)指针;最后再调用注册函数DLLRegisterServer(或注销函数为DLLUnRegisterServer)。感兴趣的,可以参照相关的资料,自己动手进行编程。
                     当然,在实际编程应用中,往往需要自注册。对于ActiveX 控件和ActiveX DLL可以在制作安装程序后,安装时自动注册。而对于ActiveX EXE 可能要麻烦一些,我们不可能
                     在每次运行软件时,先在编程环境中,通过代码的编译或浏览来注册。通过实践,总结出如下的方法来实现自注册:
                     (1)利用编程工具自带的制作安装程序的工具,来制作安装程序,安装时,可以自动实现ActiveX EXE的自注册。
                     (2)利用加上参数 /regserver,实现自注册。在VB6.0编程中,当需要用到ActiveX EXE时,通过VB6.0的系统函数shell(),同时进行调用和自注册。命令格式为:
                     shell “[path\] filename /regserser”
                     卸载时,只需将 /regserser 替换为 /unregserser就行了。假如组件文件与应用程序在同一个目录中或在 \windows\system\下,组件文件路径名可以省略。
                     (3)假如想用Installshield为应用程序制作专业级的安装程序,同时又需要ActiveX EXE的自注册,可以将应用程序用Installshield打包,而ActiveX EXE用VB6.0打包,制作出两个安装程序。在使用时,两个安装程序都运行一次,这样,也可以实现要求,只是比较麻烦
                  


                  10楼2010-09-27 09:32
                  回复