Victory.ms 发表于 2012-7-27 13:02

资源文件写到硬盘执行后删除代码 适合调用

本帖最后由 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
最近见很多人都在找写出资源代码 就分享出来
页: [1]
查看完整版本: 资源文件写到硬盘执行后删除代码 适合调用