天天看點

生成運作庫,并運作它。

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

繼續閱讀