单文档应用程序用了MSCOMM控件这个ActiveX控件,要放到一台别的没装VC的机器上也能运行。MSCOMM32.OCX是这个ActiveX控件的文件。要程序运行,听说除了把MSCOMM32.OCX文件放到系统目录下,还要注册这个文件(在一台没装VC的机器上我试了,仅仅把MSCOMM32.OCX文件放到系统目录下,程序运行不了)。有人告诉我用installshield做安装包的时候可以注册ActiveX控件,请问,是这样的吗?具体又如何注册呢?我想注册ActiveX控件应该是的制作安装包的一个常用的步骤,应该会有人用到过吧?!!

解决方案 »

  1.   

    在command里用regsvr32是吗?问题:
    1。我试了,还是用不了
    2。即使能用,做安装包的时候也不能这样用啊。我想知道怎样做这样的安装包。
      

  2.   

    把MSCOMM32.OCX选入installshield后,
    把他的文件属性改成自注册的(self-registered改为yes)
      

  3.   

    请问,我没有正版的installshield,怎么办?听说盗版的不好用。
    此外,有什么可以用于注册这种ActiveX控件的其他的安装制作
    软件有哪位高手可以推荐一下吗?
      

  4.   

    [HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]  @ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
    导入你的注册表就行了!祝你好运!
      

  5.   

    xdyanzg(Thief),你是说在哪里进行这一项操作?是在installshield里面吗?
      

  6.   

    在installshield里面可以,使用注册表编辑器手动添加也可以
      

  7.   

    xdyanzg(Thief),你说的在installshield里面可以,是指在“Registry Data”这一步吗?
    这一步的提示如下,要你选择一个后缀名为“.reg”的注册文件(REG File).但是我怎样得到这样的REG File呢?(我把我的MSCOMM32.OCX指定为Global_Default_Dlls这个component)select a component,and specify a registry(.reg)file which Installshield will merge with the component's registry data.The registry entries will be written to the target system when the component is installed.
      

  8.   

    即要你选定MSCOMM32.OCX这个component的注册文件,是在这里进行注册吗?怎样生成注册文件呢?为什么还要生成注册文件呢?我在前面已经将MSCOMM32.OCX这个component选定为“Files are self-registering”啊!
      

  9.   

    1. 使用Regsvr32.exe程序对ActiveX控件进行注册;    2. 使用安装程序制作软件:InstallShield;    3. 在应用程序中加入注册代码。    上述方法适用范围不同,各有各的优点,下面分别讨论。    一、 使用Regsvr32.exe程序对ActiveX控件进行注册    对于未注册过的ActiveX控件可使用此软件对其进行注册,外来ActiveX控件要应用到自己的程序中也必须进行注册。该文件位于Windows目录的system子目录下。使用方法如下:点击“开始”→“运行”;在运行对话框中输入以下命令: regsvr32  < 文件名 >        注册一个ActiveX控件
    regsvr32  /u  < 文件名 >    解除某ActiveX控件的注册
       我们使用一些带ActiveX控件的应用程序时,有时会出现不能运行的情况,这有可能是其自带ActiveX控件未注册所至,这时不妨使用上述命令一试。另外,VC++使用者若对regsvr32.exe的编码感兴趣的话,可在VC++的联机帮助中找到其源代码。若使用VC++ 6.0,则在MSDN光盘的\sample\VC98\MFC\controls\regsvr中。 
       二、 使用安装程序制作软件:InstallShield    使用regsvr32.exe来注册ActiveX控件虽然简单,但需要用户手工注册,在不用时还得手工解除注册,因此,这对一个应用程序来说并非好的解决方案。大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件注册是较为理想的一种方案。使用InstallShield可以制作出专业级的Setup,还可注册其中的ActiveX控件;而且,在以后携载软件时,自动注销掉以前注册的ActiveX控件。方法如下:    1. 启动InstallShield,使用Project Wizard建立一个新的项目;    2. 新建一个“File Group”,将需要注册的ActiveX控件文件放入此“File Group”中;    3. 将上述“File Group”的“Self-Registered”属性设置成“Yes”。    上述步骤仅为制作Setup中设置自动注册ActiveX控件几步,至于使用InstallShield怎样制作一个完整的Setup不在本文讨论范围之中,请读者自己参看有关书籍。    三、 在应用程序中加入注册代码    对于小型程序不宜采取第二种方法,较好的方法是在程序中嵌入注册代码,实现应用程序自注册。其编程方法是:    1. 使用Windows API函数LoadLibrary载入ActiveX控件;    2. 使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterServer)指针;    3. 调用注册函数DllRegisterServer(或注销函数DllUnregisterServer)。    下面以VC++ 6.0编写的RegActivex程序为例,介绍怎样在程序中自动注册(注销)ActiveX控件。RegActivex的主体框架由VC++ 6.0的AppWizard自动产生,在其基础上增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”。当选择“注册ActiveX控件”菜单时,将对控件toweratl.ocx(一个汉诺游戏)进行注册;当选择“注销ActiveX控件”菜单时,将解除控件toweratl.ocx的注册。    1. 使用VC++ 6.0建立一个单文档的应用程序RegActivex,其他项目接受默认设置;    2. 给应用程序增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”,步骤如下:    ① 单击VC++ 6.0左边窗口的“ResoureView”,双击MENU项目下的IDR_MAINFRAME以打开菜单编辑器;    ② 在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”;    3. 给新建的菜单项 “注册ActiveX控件” 和“注销ActiveX控件”增加响应函数:    ① 在资源编辑其中,双击MENU中的IDR_MAINFRAME打开菜单编辑器,单击“注册ActiveX控件”,按Ctrl+W打开MFC Class Wizard;    ② 双击Messages框中的COMMAND,给“注册ActiveX控件”菜单项增加响应函数OnRegisterReg(),单击右边“Edit”按钮给OnRegisterReg()函数增加如下代码: void CMainFrame::OnRegisterReg()
      {
      //ActiveX控件的路径及文件名
      LPCTSTR pszDllName="toweratl.ocx";
            //装载ActiveX控件
      HINSTANCE hLib = LoadLibrary(pszDllName);
            if (hLib < (HINSTANCE)HINSTANCE_ERROR)
            {
                    MessageBox("不能载入Dll文件!","结果",MB_OK);
                    return;
            }
      //获取注册函数DllRegisterServer地址
            FARPROC lpDllEntryPoint; 
            lpDllEntryPoint = GetProcAddress
    (hLib,_T("DllRegisterServer"));
            //调用注册函数DllRegisterServer
     if(lpDllEntryPoint!=NULL)
            {
                    if(FAILED((*lpDllEntryPoint)()))
                    {
    MessageBox("调用DllRegisterServer 
    失败!","结果",MB_OK);
    FreeLibrary(hLib);
    return;
                    };
    MessageBox("注册成功","结果",MB_OK);
            }
            else
    MessageBox("调用DllRegisterServer失败!"
    ,"结果",MB_OK);
    }
       ③ “注销ActiveX控件”菜单项响应函数的编写方法同上,代码也相似,只是将 
    “lpDllEntryPoint=GetProcAddress
    (hLib,_T("DllRegisterServer"));”改成:
            lpDllEntryPoint = GetProcAddress
    (hLib,_T("DllUnregisterServer"))。
       4. 编译联接上述程序,即可得一个可执行文件。另需注意的是:应将ActiveX控件文件toweratl.ocx复制到Windows的system目录下。控件文件toweratl.ocx在微软出版的《Visual C++ 6.0程序员指南》所附光盘中可以找到。 
       5. 测试上述程序:运行《Visual C++ 6.0程序员指南》所附光盘中的game2程序,若使用RegActivex注册了toweratl.ocx控件,则该程序可以正常运行;若使用RegActivex注销了toweratl.ocx控件则game2不能运行。
      

  10.   

    使用installshield,在Resoures的Registry Sets 中添加。
    如果还不清楚,可以告诉我你的Email
      

  11.   

    在windows命令窗口执行 regsvr32 目录名+MSCOMM32.OCX MSCOMM32.OCX放到那个目录下都行如果还不行 给我留言!
      

  12.   

    NB的话,自己动手做一个呀!
    建议参考《VC技术内幕》(The Fourth Edition)的RegComp例子,也可以直接用现成的,只要你不嫌烂!
      

  13.   

    free_card(痛并快乐着),太感谢你了,写得这么详细!我试了你的ActiveX控件的注册,注销代码,在XP下用的很好,但是,一到98下,就不能用.我看了一下,在98下,用你的那种代码注册以后,那个ocx文件确实在被使用(因为不能改名).但是,就是打不开串口,但是,在XP下,用同样的程序又能打开串口.
    我的打开串口的语句是这样  if (!m_mycomm2.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1))
    {
    TRACE0("Failed to create OLE Communications Control\n");
    AfxMessageBox("打开串口失败!");
    return;      // fail to create
    }不知道有什么问题啊~~~我被搞死了!!!!
      

  14.   

    现在的问题还是在没有装VC的机器上用不了.不管是XP还是98只可能是这个程序在用到这个ocx控件的同时,还用到VC在一个不知道什么地方的地方
    安装了不知道什么文件.而我这个程序在使用这个ocx文件的时候还要调用它!
    但是这怎么可能!!难道ActiveX控件不是封装好的吗?!!!
      

  15.   

    留下你的信箱,我给你发个专门注册ActiveX控件的应用程序。
      

  16.   

    太感谢了!
    [email protected]
      

  17.   

    mtsh(清风华仔),谢谢你的程序.但是,我试了一下,在没有装VC的win98下,我用你的那个exe程序注册一个已存的ocx文件后,还是用不了(串口还是打开不了).但是在装了VC的机器上,串口就能打开.在那台没装VC的机器上,用对话框形式的程序,就可以打开串口(因为对话框程序不需要注册控件.这说明不会是串口有问题,只可能是那个ocx文件不用注册).
      

  18.   

    我试了一下xdyanzg的方法.不行.但是我估计是我出错了.我试着用盗版的installshield(v7.01)做了一个安装文件.具体的工作就是把我用VC写的应用程序拷贝到program files目录下,把mscomm32.ocx拷贝到system32目录下,在installshield里,我在component下的mscomm32.ocx目录下的Registry Data下,照你那样做了(见http://myswt.51.net/look.jpg中的图).不知道哪步做错了.在一台机器上安装后的结果就是把那些文件(包括mscomm32.ocx)拷贝到各个目录下,mscomm32.ocx注没注册我不知道(怎样判定其注册了啊?),但是我的程序还是用不了.在装了VC的机器上又可以用.不知道我以上各步哪一步可能出了问题?望指教!!还有,我把mscomm32.ocx的属性改为self-register,也不行!!!