我做了个web控件,在频繁的更新测试,有时后会发生怎么也
御载不了原来大的版本的控件,最后只好载注册表查找控件
的clsid,然后把注册表中的这些项删掉,然后浏览web页面的
时候就会重装控件,并且正常。。
怎么编写控件的反安装程序啊,不用手动的去清楚注册表。。

解决方案 »

  1.   

    可以用shellexecute 执行regsvr32 /u
    也可以用注册表函数删除
      

  2.   

    到http://www.installsite.org/看看是否有相关的例子!
      

  3.   

    typedef DWORD(CALLBACK * PREG)(void);
    void CRegOCXDlg::OnReg() 
    {
    // TODO: Add your control notification handler code here
    TCHAR AppFullPath[_MAX_PATH];
    GetModuleFileName(NULL,AppFullPath,_MAX_PATH);
    CString m_AppPath;
    m_AppPath=AppFullPath;
    int iAppPosition;
    iAppPosition=m_AppPath.ReverseFind('\\');
    m_AppPath=m_AppPath.Mid(0,iAppPosition+1);
    char pOCXPath[100];
    PREG lpDllEntryPoint;
    HINSTANCE hLib;
    CString m_OCXFileName;
    if(m_OcxList.GetCurSel()==CB_ERR)
    {
    m_OCXFileName="NULL";
    (CButton*)GetDlgItem(IDC_REG)->EnableWindow(FALSE);
    }
    else
    {
    m_OcxList.GetLBText(m_OcxList.GetCurSel(),m_OCXFileName);
    (CButton*)GetDlgItem(IDC_REG)->EnableWindow(TRUE);
    }
    if(m_OCXFileName=="NULL")
    {
    (CButton*)GetDlgItem(IDC_REG)->EnableWindow(FALSE);
    }
    else
    {
    sprintf(pOCXPath,"%s%s",m_AppPath,m_OCXFileName);
    hLib=LoadLibrary(pOCXPath);
    if(hLib)
    {
                                //注意这里,将函数地址DllRegisterServer改为DllUnregisterServer就可以了
    lpDllEntryPoint=(PREG)GetProcAddress(hLib,_T("DllRegisterServer"));
    if(lpDllEntryPoint!=NULL)
    {
    (*lpDllEntryPoint)();
    AfxMessageBox("组件注册初始成功!",MB_ICONINFORMATION);
    FreeLibrary(hLib);
    }
    else
    {
    AfxMessageBox("组件注册初始失败!",MB_ICONINFORMATION);
    }
    }
    }
    }
      

  4.   

    HINSTANCE hIn = Loadlibrary("path and ocx file name");
    if(NULL == hIn)
      return;
    FARPROC proc;
    proc = GetProcAddress(hIn,"DLLURegisterServer");
    if(NULL!=proc)
    {
       if(FAILED((*proc)()))
          return
       else
          MessageBox("uregister success!");
    }
    else
       return;
    这个是VC里的反注册
    如果嫌麻烦,就可以直接在“.bat”文件里面写一句“unregsrv /u 路径+控件名”,运行即可,或者在运行
    里写上面的语句也一样可行。