这个问题在VC中有相应的办法,在编译时选择静态,把用到的资源全部打到EXE中去,不过VB我也是刚到实用的地步,不知道VB6中有没有这样的编译方法,也许有吧。
另外,不知我说得对不对,高手不要见笑。你在你的光盘中把用到的OCX全部刻上去,然后在主程序的开始加上一个注册功能,不用运行这个光盘的机子上的OCX,而用你自己刻上去的OCX(不过不象是绿色的了)。或者干脆在主程序的开始加上一段这样的程序--把该机子上的对应OCX备份(一般是在SYSTEM目录下),然后把你的OCX拷到这个机子上,这样你的程序就可以用了。然后在主程序结尾的地方加上一段把你的OCX删掉,把原来的OCX再恢复回来的功能就可以了,麻烦了点,不过符合绿色的标准,因为我注意到有一些称绿色的只在光盘上运行的软件就是这么做的。

解决方案 »

  1.   

    把Comdlg32.ocx、MSCOMCTL.OCX复制到程序所在目录
      

  2.   

    COMDLG32。OCX可以利用代码或类模块来完成,但mscomctl.oxc是否也能通过模块或类模块来完成就不知道了
      

  3.   

    用VB想实现此功能确实麻烦!!要看你的程序中都使用了哪些控件,你需要把那些控件都注册到系统中,也就是手动完成安装的过程,然尔,这个注册程序又不能是VB做的,还是需要一个你所说的“绿色程序”。
      

  4.   

    VB很难做到。
    我也遇到过你的问题。
    VB没有办法解决。
    我后来用BCB写的程序。很方便。
      

  5.   

    综合了一下以上各个答案,确实对理清思路有所帮助,现将进一步的问题整理如下:
    1。我不会让程序自动完成控件注册。哪位大侠给我相关资料?2。to: calyforer(无心) ——可以在光盘某路径下刻录Comdlg32.ocx、MSCOMCTL.OCX,但是怎么让程序运行前自动把它们拷贝到系统路径下?3。to: zyl910(910:分儿,我来了!) (L2002) ——你所说的:把Comdlg32.ocx、MSCOMCTL.OCX复制到程序所在目录,是否是指可以让系统在运行该程序时,不在系统路径下找这两个文件,而在程序所在盘上找?如果是这样的话,那实在是很好,可是怎么实现呢?4。解决后该问题分值200,决不食言。
      

  6.   

    其实这个问题很简单,也很容易解决,既然你会用VB做这个事情,那你应该可以用DELHPI做同样的事情,大家都知道,只有VC,DELPHI可以做到绿色软件,既什么动态连接库都不要的程序。如果你一定要用VB,那你可以把用到的文件都拷贝到一个目录下,但是这样大家也都知道,这样做还是不能根本解决问题,所以,我建议你用DELPHI试试,其实语法和VB差不多!
      

  7.   

    记得我曾试过,不是必须把ocx放在system目录下
    放在应用程序的相同目录一样可以。只是没有尝试
    过是不是所有ocx都可以。你试试吧,找个干净的
    机器,把你程序用到的ocx都拷到app.path 里
    编译试试
      

  8.   


    根据我目前对你问题的理解,我觉得你可以采用动态注册的方法
    注册的方法如下:
    1.把相关的控件拷贝到windows\system目录下,或者
    2.利用API函数winexec执行 C:\WINDOWS\SYSTEM\Regsvr32.exe 
    如:C:\WINDOWS\SYSTEM\Regsvr32.exe  "C:\Program Files\Web Publish\Flupl.ocx"(这样只是在注册表中添加注册信息,系统在需要这个控件的时候会到注册的目录中找)
      

  9.   

    zhsu(做人Bata版) 说得对,把所有的DLL与OCX拷到和可执行文件相同的目录下即可。
    至于究竟需要哪一些DLL/OCX,则可以看一下VB打包后的SETUP.LST文件,相信你看一下其内容后就马上知道你的软件总共需要多少的DLL/OCX了。如果对你有所帮助的话,记得要多送分哟!--哈哈。小马哥向大家问好了!
      

  10.   

    我觉得把只需要的库或者什么OCX全部放在程序所在目录下就行了。
    只有编译的时候需要拷到系统目录下,编译完成后直接在该目录运行程序就行了
    这里介绍一下VB6的库主要有msvbvm60.dll和vb6chs.dll
    再把你的OCX拷过来,完成后直接在这个目录下执行,不需要安装。
    至于ocx的注册,需要的话,就按照上面别人说的做
      

  11.   

    系统查找dll的顺序:
    注册表。从注册表查找该Ocx是否注册,并得到位置
    当前目录。一般程序所在目录就是当前目录,所以把*.ocx放在程序所在目录能运行。但如果你是在另一目录通过命令行方式运行该exe的话,会出现找不到*.ocx的错误!
    System目录
      

  12.   

    It's so kind of you all.
    问题基本解决了,虽然没有在光盘上试AUTORUN功能,但我相信问题不大吧。我把所需的OCX放到EXE所在路径就可以正常运行了,没有拷贝support文件夹中的DLL文件,因为那些文件太大了,这样做以后不会出现问题吧?(如果有问题麻烦发个短信告诉我吧)
    分值有限,遵循First comes,first gains的原则,所以分有多有少,最后还是感谢各位的帮助。
      

  13.   

    It's so kind of you all.
    问题基本解决了,虽然没有在光盘上试AUTORUN功能,但我相信问题不大吧。我把所需的OCX放到EXE所在路径就可以正常运行了,没有拷贝support文件夹中的DLL文件,因为那些文件太大了,这样做以后不会出现问题吧?(如果有问题麻烦发个短信告诉我吧)
    分值有限,遵循First comes,first gains的原则,所以分有多有少,最后还是感谢各位的帮助。
      

  14.   

    这个问题只让增到100分,所以请 zyl910(910:分儿,我来了!) (L2002)到http://www.csdn.net/expert/topic/828/828628.xml?temp=.4702112
    下领100分。