思路:把exe中dll资源导出到系统目录文件夹下
一般32位系统放到system32下,64位系统将32位的放到sysWOW64下,64位控件放到system32下。
//RegistryDll用来注册DLL,参数是DLL的全路径,返回值代表注册成功或者失败(TRUE为成功)。
BOOL RegistryDll(char * szDllPath)
{
char szExecutePath[MAX_PATH + 1] = {0};
szExecutePath[0] = '/';
szExecutePath[1] = 's';
szExecutePath[2] = ' ';
strcat(szExecutePath, szDllPath);;
ShellExecute(NULL, "open", "regsvr32.exe", szExecutePath, "", SW_HIDE);
return 0;
}
释放资源到本地
BOOL ReleaseRes(char * strFileName, WORD wResID, char * strFileType)
{
DWORD dwWrite=0;
// 创建文件
HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
return FALSE;
}
// 查找资源文件中、加载资源到内存、得到资源大小
HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
HGLOBAL hG = LoadResource(NULL, hrsc);
DWORD dwSize = SizeofResource( NULL, hrsc);
if (!(hrsc&&hG&&dwSize))
{
return FALSE;
}
// 写入文件
WriteFile(hFile,hG,dwSize,&dwWrite,NULL);
CloseHandle( hFile );
return TRUE;
}
BOOL Registry()
{
int iRet = 0;
//把exe中dll资源导出到本地文件下
//一般32位系统放到system32下,64位系统将32位的放到sysWOW64下,64位控件放到system32下。
ReleaseRes("C:\\WINDOWS\\SysWOW64\\npRockey3Plugin.dll",(WORD)IDR_DLL1,"dll");
ReleaseRes("C:\\WINDOWS\\System32\\npRockey3Plugin.dll",(WORD)IDR_DLL2,"dll");
iRet = RegistryDll("C:\\WINDOWS\\System32\\npRockey3Plugin.dll");
iRet = RegistryDll("C:\\WINDOWS\\SysWOW64\\npRockey3Plugin.dll");
MessageBox(NULL, "注册控件成功!", "提示", MB_OK);
return TRUE;
}