谁知道如题相关资料,或者过程,给介绍一下,谢谢

解决方案 »

  1.   

    将exe作为资源文件?
    http://blog.csdn.net/visualeleven/article/details/6035381这样?
      

  2.   

    HRSRC res;
    HGLOBAL data;
    void *pdata; HINSTANCE inst = AfxGetInstanceHandle();
    res = ::FindResource( inst, MAKEINTRESOURCE( IDR_SCINTILLA_DLL ), _T( "SCINTILLA_DLL" ) );
    if( !res )
    {
    return;
    } data = ::LoadResource( NULL, res );
    if( !data )
    {
    return;
    } size = ::SizeofResource( NULL, res ); pdata = ::LockResource( data );
    if( !pdata )
    {
    return;
    } buf = new unsigned char[ size + 0x100 ];
    memset( buf + size - 0x10, 0, 0x100 );
    memcpy( ( unsigned char * )buf, pdata, size ); FILE *fp; fp = _tfopen( all, _T( "wb" ) ); if( fp )
    {
    fwrite( buf, 1, size, fp );
    fflush( fp );
    }
    fclose( fp );
    UnlockResource( data );
    FreeResource( res );
    return;
      

  3.   

    感觉怎么都用到MFC和类了呢?我想的是这样,就像安装程序那样,运行后能释放DLL和Exe文件到磁盘中,一个普通的Win32 Application能做到的,呵呵,有没有详细资料,谢谢
      

  4.   

    呵呵,不好意思,看错了,res = ::FindResource( inst, MAKEINTRESOURCE( IDR_SCINTILLA_DLL ), _T( "SCINTILLA_DLL" ) );
    这里是不是从外部程序中导入了资源呢?我想的是在本程序中释放另一个Exe文件,比如释放出一个弹出MessageBox的文件;在看到一些安装文件和一些木马文件释放比自己本身大的文件时感觉很奇怪,不知道怎么实现?
      

  5.   

    这就是从exe自身的资源文件中释放的,释放比自身还大的文件也很简单,释放压缩的就可以了。
      

  6.   

    HZIP zip;
    ZIPENTRY ze;
    ZRESULT zr;
    int number; zip = OpenZip( all, NULL );
    if( !zip )
    {
    AfxMessageBox( _T( "Open Zip error" ) );
    return;
    }
    zr = SetUnzipBaseDir( zip, zipdir );
    zr = GetZipItem( zip, -1, &ze );
    number = ze.index; int k;
    for( k = 0; k < number; k++ )
    {
    GetZipItem( zip, k, &ze );
    UnzipItem( zip, k, ze.name );
    } CloseZip( zip );
    这就是先释放一个zip文件,然后使用ZipUtils这个网上的库进行解压缩的。
      

  7.   

    使用资源是一个方法,如果是希望像安装程序一样,最好可以借助zlib这样的函数库(跨平台),这样可以对安装的文件解压缩到相应目录;至于打包的数据放到哪里就看LZ的喜好了;
      

  8.   

    res = ::FindResource( inst, MAKEINTRESOURCE( IDR_SCINTILLA_DLL ), _T( "SCINTILLA_DLL" ) );
            if( !res )
            {
                return;
            }
    我尝试释放一个bitmap,总是不成功,
    我在这里加一个if(hrsc==NULL)
    MessageBox(0,"资源句柄无效","句柄",MB_OK);总能弹出提示;句柄为NULL,这是为什么啊?
    另外我的是Win32 Application应用程序,自己画的位图
      

  9.   

    我的例子是释放一个dll的,如果要释放一个bmp,可以参考http://wenku.baidu.com/view/f6766ba1b0717fd5360cdc8c.html
      

  10.   

    我尝试释放一个Dll,还是不行,错误是一样,都是资源句柄是NULL,最后文件是能释放,但文件的大小是0字节,代码这样,你看有啥不对的没:
    #include "Windows.h"
    #include "resource.h"BOOL ReleaseRes(char * strFileName,char *lpName,LPCTSTR lpType,HINSTANCE hInstance);int WINAPI WinMain(
      HINSTANCE hInstance,      // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,          // command line
      int nCmdShow              // show state
    )
    {
       if(FALSE==ReleaseRes("d.dll","testDll.dll","dll",hInstance))
       {
       MessageBox(0,"释放失败","提示",MB_OK);
       return 0;
       }}
    BOOL ReleaseRes(char * strFileName,char *lpName,LPCTSTR lpType,HINSTANCE hInstance)   
    {   
        // 资源大小   
        DWORD   dwWrite=0;         
      
        // 创建文件   
        HANDLE  hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,   
                                    CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);   
        if ( hFile == INVALID_HANDLE_VALUE )   
        {   
            return FALSE;   
        }   
      
        // 查找资源文件中、加载资源到内存、得到资源大小 

       HRSRC   hrsc=::FindResource(hInstance, lpName, lpType);  if(hrsc==NULL)
    MessageBox(0,"资源句柄无效","句柄",MB_OK);
        HGLOBAL hG = LoadResource(NULL,hrsc);   
        DWORD   dwSize = SizeofResource( NULL,hrsc);   
      
        // 写入文件   
        WriteFile(hFile,hG,dwSize,&dwWrite,NULL);      
        CloseHandle( hFile );   
        return TRUE;   
    }  
      

  11.   

    现在的释放我已经做好了,初步做的是释放DLL 和jpg的文件,面临的就是压缩的了9楼的兄弟,你那个方法是怎样的?在网上找不到太多资料
      

  12.   

    Zip utils代码
      

  13.   

    我用的是这个http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win32
      

  14.   

    谢谢jennyvenus了,压缩可以完成了,只是压缩的比例不太高,我尝试了几个,大部分都是压缩为原来的一半,