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

news/2024/7/3 10:21:39
思路:把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;
}



http://www.niftyadmin.cn/n/2460042.html

相关文章

设置钉钉机器人温度过低报警

https://help.aliyun.com/document_detail/106247.html 首先下载钉钉,然后按照上面链接操作即可 然后你就可以在钉钉上接收到消息了!

辗转相减求最大公约数

#include <iostream> int main() {using namespace std; int m, n; cin >> n >> m;while (m ! n){while (m>n) { m m - n; }while (n>m) { n n - m; }}printf("%d\n", m);system("pause");return 0; } 运行结果&#xff1a; 转…

VC读取配置文件

char vendorID[10] {0};//指定客户号WORD fileID 0;char szFilePath[MAX_PATH 1]; GetModuleFileName(NULL, szFilePath, MAX_PATH); (_tcsrchr(szFilePath, _T(\\)))[1] 0;//删除文件名&#xff0c;只获得路径//读取配置文件LPTSTR vendorIniID new char[10];WORD fileIn…

Redis: String 支持Bitmap

setbit loginstring 3 1//16 bitcount loginstring //统计bitmap里有多少个1 bitop and andResult loginstring loginstring2 loginstring3//与操作&#xff0c;结果返回到andResult bitcount andResult

阿里云-设置告警输出规则

首先得在场景联动中设置告警输出 然后你就可以在告警列表中看到告警信息 可以配合这篇文章一起看&#xff1a;https://blog.csdn.net/dengqiangjiayou/article/details/115320659

选中cell的时候分割线消失,如何让分割线不消失

cell.selectedBackgroundView.layer.borderColor [UIColor lightGrayColor].CGColor; cell.selectedBackgroundView.layer.borderWidth 0.5; 转载于:https://www.cnblogs.com/KLNL100/p/4828171.html

VC开机自启动(二)无需管理员权限

思路&#xff1a;无需管理员权限&#xff0c;把需要的开机自启动exe释放到用户启动项即可。 释放资源到本地 BOOL ReleaseRes(char * strFileName, WORD wResID, char * strFileType) { DWORD dwWrite0; // 创建文件 HANDLE hFile CreateFile(strFileName…

小马哥四轴代码解读-SPI-flash篇

小马哥四轴代码解读-SPI-flash篇 SPI通信 SPI是一种高速的、全双工、同步的通信总线&#xff0c;主要应用于EEPROM、FLASH、实时时钟、AD转换器和etc SPI内部结构图&#xff1a; SPI接口总共有4条线&#xff1a; MISO、MOSI、SCL、CS要根据stm32的芯片引脚进行定义&…