本帖最后由 Victory.ms 于 2012-7-27 13:05 编辑 //----------------------写出资源文件-----------------------------------
HRSRC hRsrcInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE), TEXT("MYEXE"));//得到资源信息的句柄
if (NULL==hRsrcInfo)
{
DWORD dwErr = GetLastError();
AfxMessageBox(TEXT("资源未找到"));
return; // 失败
}
DWORD dwSize = SizeofResource(NULL, hRsrcInfo);
if (0 == dwSize)
{
AfxMessageBox(TEXT("资源大小错误"));
return; // 失败
}
// 加载资源
HGLOBAL hGlobal = LoadResource(NULL, hRsrcInfo);
if (NULL == hGlobal)
{
AfxMessageBox(TEXT("资源读取错误"));
return; // 失败
}
// 锁定资源
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
{
AfxMessageBox(TEXT("资源锁定错误"));
return; // 失败
}
// 写入到硬盘文件。这里我们简单的写入到硬盘文件
HANDLE hFileNew = CreateFile( TEXT("C:\\123.exe"),//直接写成"123.exe"也行
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(INVALID_HANDLE_VALUE == hFileNew)
{
AfxMessageBox(TEXT("文件创建错误"));
return; // 失败
}
// 写文件
DWORD dwlen=0;
BOOL bRet = WriteFile(hFileNew, pBuffer, dwSize, &dwlen, NULL);
if(!bRet ||dwSize!=dwlen)
{
AfxMessageBox(TEXT("文件写入错误"));
return; // 失败
}
// 关闭文件
CloseHandle(hFileNew);
// 释放资源
FreeResource(hGlobal);
//-------------------------执行写出的资源文件---------------------------------
// 执行EXE
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if(!CreateProcess(TEXT("C:\\mtr.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
DWORD dwErr = GetLastError();
AfxMessageBox(TEXT("执行EXE错误"));
return; // 失败
}
// 等待EXE返回
if(!WaitForSingleObject(pi.hProcess, INFINITE))
{
AfxMessageBox(TEXT("EXE已经结束 得到返回信息"));
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
//-------------------------删除写出的资源文件---------------------------------
if(!DeleteFile(TEXT("mtr.exe")))
{
AfxMessageBox(TEXT("文件删除错误"));
return;// 失败
}
在资源文件中添加一个要写出的exe
IDexe:IDR_EXE
类型:MYEXE
把这个exe写出到C盘并且运行监视 如果这个exe进程结束后得到返回信息 以及删除文件
适合一些后台调用 配合Showwindow
最近见很多人都在找写出资源代码 就分享出来 |