ShellExecute执行regsvr32.exe注册com控件到系统目录下

思路:把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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值