这是我自己用的,写在备份个代码,从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;
}