WEB开发网
开发学院软件开发VC 用自删除dll实现应用程序的安装/卸载代码 阅读

用自删除dll实现应用程序的安装/卸载代码

 2006-07-20 11:38:22 来源:WEB开发网   
核心提示: 自从 Windows 95 开始的每个 Windows 平台都带一组解压缩文件的 API——LZCopy,下面是安装程序使用这个 API 的示例代码:/ install.h//#define RC_BINARYTYPE 256#define ID_COMPRESSE

自从 Windows 95 开始的每个 Windows 平台都带一组解压缩文件的 API——LZCopy。下面是安装程序使用这个 API 的示例代码:

/ install.h
//
#define RC_BINARYTYPE 256
#define ID_COMPRESSED_SETUP 100
//
// install.rc
//
#include "install.h"
ID_COMPRESSED_SETUP RC_BINARYTYPE AppSetup.ex_
//
// install.cpp
//
#include <windows.h>
#include "install.h"
void WriteResourceToFile(HINSTANCE hInstance,
       int idResource,
       char const *filename)
{
  // 参见前述代码
}
void DecompressFile(char const *source, char const *dest)
{
  OFSTRUCT ofs;
  ofs.cBytes = sizeof(ofs);
  int zhfSource = LZOpenFile(const_cast<char *>(source), &ofs, OF_READ);
  int zhfDest = LZOpenFile(const_cast<char *>(dest), &ofs,
    OF_CREATE | OF_WRITE);
  LZCopy(zhfSource, zhfDest);
  LZClose(zhfSource);
  LZClose(zhfDest);
}
int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
  WriteResourceToFile(hInstance, ID_COMPRESSED_SETUP, "AppSetup.ex_");
  DecompressFile("AppSetup.ex_", "AppSetup.exe");
  DeleteFile("AppSetup.ex_");
  // 启动 AppSetup.exe
  PROCESS_INFORMATION procInfo;
  STARTUPINFO startInfo;
  memset(&startInfo, 0, sizeof(startInfo));
  CreateProcess(0, "AppSetup.exe", 0, 0, FALSE, NORMAL_PRIORITY_CLASS, 0, 0,
    &startInfo, &procInfo);
}   

从代码中可以看到压缩的 Setup 程序是如何作为安装程序的资源保存的。按照本文前面讨论的思路。DecompressFile 函数示范了 LZCopy API 的使用方法。安装程序重新创建 AppSetup.exe,然后运行它。为了顺利编译和生成安装程序,需要将 lz32.lib 添加到项目的编译选项中,通常这个文件在 Visual Studio 的安装目录中,如:

上一页  1 2 3 4 5 6 7  下一页

Tags:删除 dll 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接