为什么非要用 Regsvr32.exe 在命令行中才能注册成功呢?

elusive_wonderer 2003-05-15 01:30:48
我在注册一个第三方发布的一组 DLL 的时候,发现其中一个 DLL 用我的安装程序中自己的注册语句不能注册成功:

#ifdef _WIN32
#define LOADLIBRARY_FAILED(x) (x == 0)
#else
#define LOADLIBRARY_FAILED(x) (x <= HINSTANCE_ERROR)
#endif

typedef HRESULT (STDAPICALLTYPE *CTLREGPROC)() ; //

BOOL SelfRegisterDLL(char *pszDllName)
{
BOOL bResult = FALSE;

HMODULE hModule = ::LoadLibrary(pszDllName) ;
if (LOADLIBRARY_FAILED(hModule)) return FALSE ;

CTLREGPROC DLLRegisterServer =
(CTLREGPROC)::GetProcAddress(hModule,"DllRegisterServer" ) ;
if (DLLRegisterServer != NULL)
{
HRESULT regResult = DLLRegisterServer() ;
bResult = (regResult == NOERROR) ;
}

::FreeLibrary(hModule) ;
return bResult;
}

但是在“开始”“运行”中用 regsvr32.exe 注册便可成功。

于是我在程序中加入另一段,用 ShellExecute 来调用 regsvr32.exe 奇怪的是仍然不行。

BOOL ReRegisterDLL(char *pszDllName)
{
char sBuffer[256];
char sBuffer1[256]="/s ";

GetWindowsDirectory(sBuffer, 256);
strcat(sBuffer, "\\SYSTEM32\\Regsvr32.exe");
strcat(sBuffer1, pszDllName);

ShellExecute(NULL, "open", sBuffer, sBuffer1, NULL, SW_SHOWNORMAL);

if (!GetLastError() == 0)
{
CString strErr;
strErr.Format("Error code:%d",GetLastError());
AfxMessageBox(strErr);
return FALSE;
}
return TRUE;
}

这说明在命令行中运行 Regsvr32.exe 有某些操作并没有包括在我的代码中,去找 MSDN 中的 Regsvr32.exe 的源代码却又发现这一块没装上来。

哪位朋友知道是什么原因吗,先谢啦。
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
elusive_wonderer 2003-05-15
  • 打赏
  • 举报
回复
非常感谢各位。

zhaolaoxin,对用WinExec()没有问题,可我还是不明白我的代码中到底有什么问题,跟 Regsvr32.exe 的注册过程到底有什么区别。

zfive5,zhaowenlong,sunyou 也谢谢你们的回复。

zhaowenlong 2003-05-15
  • 打赏
  • 举报
回复
我自己做了一个注册控件的小程序,你要我给你吧!
sunyou 2003-05-15
  • 打赏
  • 举报
回复
在用 ShellExecute 来调用 regsvr32.exe 中把
"\\SYSTEM32\\Regsvr32.exe"改为"Regsvr32.exe"
zhaolaoxin 2003-05-15
  • 打赏
  • 举报
回复
不用ShellExecute(),用WinExec()应该没有问题
elusive_wonderer 2003-05-15
  • 打赏
  • 举报
回复
我先尝试的就是自己调用该 DLL 中的 DllRegisterServer函数,发现没有成功后才转而想用 ShellExecute 来调用 regsvr32.exe 的。

会不会是我在用 ShellExecute 调用 regsvr32.exe 的代码中的问题呢?
醉马不肖 2003-05-15
  • 打赏
  • 举报
回复
自己调用.ocx或.dll里DllRegisterServer函数

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧