描述:
我用ATL做了一个IE插件,怎么给它制作一个安装/卸载程序呢?
用什么工具比较好?需要注意些什么?谢谢
解决方案1:
通过regsvr32.exe加-u参数将其卸载即可或直接将注册表中 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects 下的 CLSID 删掉即可。
MSDN中有个例子
#include "io.h"
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)
{
lpDllEntryPoint=(PREG)GetProcAddress(hLib,_T("DllRegisterServer"));
if(lpDllEntryPoint!=NULL)
{
(*lpDllEntryPoint)();
AfxMessageBox("组件注册初始成功!",MB_ICONINFORMATION);
FreeLibrary(hLib);
}
else
{
AfxMessageBox("组件注册初始失败!",MB_ICONINFORMATION);
}
}
}
}