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

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

 2006-07-20 11:38:22 来源:WEB开发网   
核心提示: SelfDelete 的作用是重新创建DLL并生成如下命令行启动 rundll32.exe:path\rundll32.exe magicdel.dll,_MagicDel@16 path\executableNamerundll32.exe 位于 Windows 目录或者 System

SelfDelete 的作用是重新创建DLL并生成如下命令行启动 rundll32.exe:

path\rundll32.exe magicdel.dll,_MagicDel@16 path\executableName   

rundll32.exe 位于 Windows 目录或者 System 目录中,所以 SelfDelete 检查它的位置是否正确。当 CreateProcess 被调用执行命令行时,必须设置

STARTF_FORCE-OFFFEEDBACK 标志以防止 Windows 在运行 rundll32.exe 时显示表示忙的沙漏或光标。这样做以后用户不会感觉到有新的进程正在运行。在这个新进程退出之后,DLL 和原来的可执行文件都不见了。

为了让自删除的可执行程序不依赖于 C 运行时DLL,可执行程序必须静态链接到运行时库代码。为此修改项目编译选项即可:

项目(P)| [项目名称] 属性(P)... | C/C++ | 代码生成 | 运行时库:[单线程(/ML)] 或者 [多线程(/MT)](或者任何不包含此DLL的选项值)

此自删除技术在所有 Windows 版本中都工作得很稳定。在实际运用中,卸载程序首先将自己的拷贝放到 Windows 临时(Temp)目录,以便能删除所有程序文件和相关目录,最后它用自删除的 DLL 把自己删掉。

编写安装程序

确定了安装程序要做些什么事情之后,接着是制作安装程序。现在很多的安装程序都是由用户从Internet上下载,然后在本地运行。那么下载的文件体积越小越好,为此最有效的方法是对文件进行压缩处理。如何让用户最先看到的画面是我的程序画面而不是其它公司的安装程序画面呢,好在Windows提供了这样的支持。

首先创建一个交互式的 Setup 程序,它显示软件许可协议,提示用户安装选项,拷贝文件,然后进行其余的设置工作。然后将 Setup 程序的压缩版本作为资源保存在安装程序(installer)中。这个安装程序要做的只是将 Setup 程序二进制资源重建后写回磁盘,解压缩,然后用一个新进程启动它。保存和读写二进制资源并不难——本文前面已经描述了处理细节和代码。

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

Tags:删除 dll 实现

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