天天看点

生成运行库,并运行它。

这是我自己用的,写在备份个代码,从DLL中读取资源文件,并调用安装。
           
//F安装VC运行库
int  installRunTime(HINSTANCE hInstance)
{

	//生成安装文件
	//-------------------------------------------------------------------------
	HRSRC  hRes = FindResourceEx(hInstance, "BIN", MAKEINTRESOURCE(IDR_VC2013), 0);
	string ExeName;
	HRSRC hResLoad;
	hResLoad = (HRSRC)LoadResource(hInstance, hRes);
	char* lpResLock;
	lpResLock = (CHAR*)LockResource(hResLoad);
	CHAR lpszFileName[MAX_PATH + 10];
	GetTempPath(sizeof(lpszFileName), lpszFileName);
	
	strcat(lpszFileName, "vcr.exe");
	ExeName = lpszFileName;
	//DeleteFile(lpszFileName);

	HANDLE hFile = CreateFile(
		lpszFileName,
		GENERIC_WRITE | GENERIC_READ,
		FILE_SHARE_WRITE,
		0,
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		0
		);

	if (INVALID_HANDLE_VALUE == hFile) return -1;

	DWORD len = 6508544;
	DWORD LenWrite = 0;
	WriteFile(hFile, lpResLock, len, &LenWrite, 0);;
	CloseHandle(hFile);


	//安装
	//-------------------------------------------------------------
	CHAR szcommand[1024];
	wsprintf(szcommand, "%s /passive /quiet", ExeName.c_str());

	STARTUPINFO si = { sizeof(si) };
	PROCESS_INFORMATION pi;

	si.dwFlags = STARTF_USESHOWWINDOW;
	si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口 
	BOOL bRet = ::CreateProcess(
		NULL,
		szcommand,
		NULL,
		NULL,
		FALSE,
		0,
		NULL,
		NULL,
		&si,
		&pi);


	return 0;
}
           

继续阅读