這是我自己用的,寫在備份個代碼,從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;
}