社区
C++ Builder
帖子详情
请问反安装程序是怎么删除掉自己的
littleriver
2003-02-19 10:12:03
有的程序安装了后,我看到有一个uninstall.exe程序,运行它,出现反安装界面。我发现在这个反安装程序结束之前,这个uninstall.exe就被删除了。难度是这个反安装程序有调用了另外一个地方的程序删掉自己的??如果是直接在程序里面删除自己的话,可是这时程序正在执行啊。请问是怎么回事?
...全文
384
12
打赏
收藏
请问反安装程序是怎么删除掉自己的
有的程序安装了后,我看到有一个uninstall.exe程序,运行它,出现反安装界面。我发现在这个反安装程序结束之前,这个uninstall.exe就被删除了。难度是这个反安装程序有调用了另外一个地方的程序删掉自己的??如果是直接在程序里面删除自己的话,可是这时程序正在执行啊。请问是怎么回事?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
penu
2003-02-20
打赏
举报
回复
安装包有几种,微软提供并推荐的是msi安装方式。
wenyongjie
2003-02-20
打赏
举报
回复
贴篇文章给你,希望对你有所帮助.
监视程序的编制
监视程序,这个名字听起来似乎很陌生。它的用途主要是在后台监视系统中关键信息的改变,比如注册表的改变及硬盘上由于文件操作引起的改变等等。
也许有人会问了,编制这样的程序有什么价值呢?硬盘上文件改变了,我只要在资源管理器里点一点不就全都清楚了吗?问题当然不会这样简单,如今大家的硬盘都已经用G来做单位了,一块4.3G的硬盘中,大大小小的文件全都加起来也会有若干万(相信新购机的朋友会考虑IBM10.1G的大硬盘,那文件数量将更加不可想象),更何况那些看不见的系统文件和隐藏文件了。再加上注册表,那其中的条条款款,数量也丝毫不逊于硬盘上的文件。要想随时知道自己机器是否有所变动,绝对不是一件很轻松的事。而监视程序就可以随时检测到这些变化,帮助我们了解这些情况。
当然这只是监视程序的一部分作用,它最大的作用就是可以记录下某个软件安装前后系统的改变,从而为卸载这个软件提供重要的依据。虽然Windows自带了一个Uninstall Shield,但是它似乎并不能很干净地把原来的软件卸掉,每次卸载总会留下一些讨厌的残渣,致使系统中的垃圾信息不断增长,我们的硬盘空间也总是莫名其妙地越用越少。因此,一些号称能够完全卸载软件的专用卸载工具应运而生。在这其中,有一些就运用了监视系统的技术,比如Uninstaller Manager和RegMonitor。
下面我们开始讨论如何编程实现这一监视功能。首先介绍几个重要的api函数:
FindFirstChangeNotification( );
FindNextChangeNotification( );
WaitForSingleObject( );
其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)中的lpzpath表示要监视的路径名,fwatchsubtree判断是否查看子目录,fdwfilter为要监视的事件,函数执行成功后返回一个句柄。
参数fdwfilter取值及其含义如下:
FILE_NOTIFY_CHANGE_FILE_NAME 查看指定目录下任何文件名的改变
FILE_NOTIFY_CHANGE_DIR_NAME 查看指定目录下任何目录名的改变
FILE_NOTIFY_CHANGE_SIZE 查看指定目录下文件大小的改变
FILE_NOTIFY_CHANGE_ATTRIBUTES 查看指定目录下文件属性的改变
FindNextChangeNotification(hchange),hchange为FindFirstChangenNotification返回的句柄,其作用是请求系统
在下次检测到相应改变时发出改变通知消息句柄。当函数成功返回后,应用程序可通过WaitForMultipleObjects或WaitfForSingleObject来等待发生改变的通知。WaitForSingleObject(hchange,dwmilliseconds)中hchange为FindFirstChangeNotification 返回的句柄,dwmilliseconds为等待时间值,指定等待完成需要的时间,单位为毫秒。该值为-1时表示时间无限长。最好在结束监视程序之前先用FindCloseChangeNotification(hchange)来关闭句柄。
下面给出一个简单的实例,其功能就是监视c:\pwin98目录下是否有文件发生变化。一旦有重命名、创建或删除情况发生时,通过Edit控件给出提示。
//
----------------
#include
#pragma hdrstop
#include “Unit1.h”
//----------------
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm1 *Form1;
//-----------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DWORD dwWaitStatus;
HANDLE dwChangeHandle; //返回通知的句柄
dwChangeHandle=FindFirstChangeNotification(
“C:\\PWIN98”,false,FILE_NOTIFY_CHANGE_FILE_NAME); //设置返回通知的句柄
if(dwChangeHandle==INVALID_HANDLE_VALUE)
//判断是否设置成功
ExitProcess(GetLastError( ));
while(true){ //设置循环,监视是否有
dwWaitStatus=WaitForSingleObject(dwChangeHandle,-1); //通知返回
switch(dwWaitStatus){
case 0:
Edit1->Text=“Something Changed”; //给出提示
FindCloseChangeNotification(dwcChangeHandle); //关闭句柄
exit(EXIT_SUCCESS); //退出程序
default:
ExitProcess(GetLastError( ));
}
}
}
程序在C++Builder4/PWin98下通过,由于C++Builder语言很标准,所以很容易扩展到其他编程语言环境中去。
此例说明如何监视硬盘中文件变化,对于注册表,则有函数RegNotifyChangeKeyValue( )可以实现类似功能,这里暂省略之。
怎么样,看过本文,是否对Uninstaller Manager和Reg Monitor这样的软件有了更深入的了解。在Windows编程中,有些API函数起到了重要的作用,可以让程序实现很多高级的功能。因为API函数是按照C语言语法给出的,所以C++Builder有着得天独厚的优势,对API函数和宏支持得非常好。不好,怎么跑题了?
还愣着干吗,难道你还不想赶快动手编制一个自己的Uninstaller Manager吗?
caimouse
2003-02-20
打赏
举报
回复
安装程序是怎写的呢?
用CB能写一个安装程序吗?
huang_jihua
2003-02-19
打赏
举报
回复
同意 myy()
penu
2003-02-19
打赏
举报
回复
TO:kingcaiyao(AKing)
你所说的只是卸载机制的一种,
一些打包软件的卸载机制不是这样的。
有的用install/uninstall.log记录安装信息,卸载时根据该信息进行反向操作。
还有的用批处理。
cscer
2003-02-19
打赏
举报
回复
自杀程序:
#include <windows.h>
int main()
{
char buf[MAX_PATH];
HMODULE Hm1,Hm2;
HANDLE Ex,De,Un,aaa;
Hm2=GetModuleHandle(0);
GetModuleFileName(Hm2,buf,255);
Hm1=GetModuleHandle("Kernel32");
Ex=GetProcAddress(Hm1,"ExitProcess");
De=GetProcAddress(Hm1,"DeleteFileA");
Un=GetProcAddress(Hm1,"UnmapViewOfFile");
aaa = (HANDLE)4;
CloseHandle(aaa);
__asm {
LEA EAX,buf
PUSH 0
PUSH 0
PUSH EAX
PUSH Ex
PUSH Hm2
PUSH De
PUSH Un
RET
}
return 0;
}
kingcaiyao
2003-02-19
打赏
举报
回复
其实每一个提供安装与卸载的软件,在软件的安装过程中,对注册表进行写操作,其中在这些写操作过程中就写下了该软件卸载时用到的文件,经常软件安装完后会看到一个.isu文件,这个文件就记录了软件安装过程所进行的操作,由_ISDEL.exe来进行卸载。
myy
2003-02-19
打赏
举报
回复
最简单的:在程序中生成一个a.bat,内容:
del xxxxx.xxx
del yyyyy.yyy
del dbchsb.zzz
; ...
; 其他想干的事
; ...
del %0(这行末不能有回车!!!)
再在程序退出时调用 a.bat
kingfish
2003-02-19
打赏
举报
回复
卸载具体怎么做的不清楚。
但运行程序是可以删除自己的,搜索“程序自杀”,
l_clove
2003-02-19
打赏
举报
回复
应该不是自己删自己,可以这么做,但我认为不是,可能是windows做的
penu
2003-02-19
打赏
举报
回复
大部分反安装程序正如你所说,则调用另一个地方的程序删掉自己的;
有一些不是由打包程序生成的而是软件作者自己手工打造的则可能用了自杀技术来删除自己,这种情况下一般你会发现软件所在目录没被删除。
当然软件目录没被删除原因有很多,如目录中有软件安装后又新增的文件,反安装程序有BUG等。
Bird1945
2003-02-19
打赏
举报
回复
好象WNNT下(2000)有个UNINSTALL程序.
大家找找看有没有.
绝对虚拟硬盘软件 InsPro Disk 2.8(免资源分)
InsPro Disk 绝对虚拟硬盘软件 虚拟硬盘软件,虚拟出的硬盘与真实硬盘一样可以进行分区、格式化等操作。 我经常在做数据恢复过程中用到它,比如以前要使用easy recovery,recovery my files等扫描工具 恢复 镜像文件上的数据,但这几款软件又不支持镜像文件的扫描,就要用到InsPro Disk把文件虚拟成磁盘,然后就可以用那些软件扫描了 。功能强大吧,用到的地方也蛮多的,值得收藏。而且操作界面也很简单也有说明,就不做多介绍了。 使用方法: 用InsPro Disk Creator创建磁盘镜像. 实际生成的文件大小会有调整. 请确保硬盘上空闲空间至少有63MB. 如果需要100M的虚拟硬盘, 则要确认有163M的空闲空间. 用InsPro Disk Loader来加载硬盘. 此时您可以用PARTITION MAGIC或者WINDOWS自带的工具分区, 格式化. 如果已经有分区, 会自动加载. 用InsPro Disk Loader来卸载硬盘. 选中已经存在的SLOT. 然后点LOAD/UNLOAD, 稍等片刻就会卸载对应的硬盘. 加载/卸载InsPro Disk时请注意InsPro Disk Loader的标题栏变化. 操作完成后标题栏恢复到最初状态.
反
安装方法: InsPro Disk不是为菜鸟准备的工具. 您如果不熟悉设备管理器的一些基本操作, 不建议您玩INSPRO DISK. 因为您将很难
反
安装程序
. 将所有的InsPro Disk用InsPro Disk Loader卸载
掉
. 打开设备管理器. (从我的电脑->属性->硬件->设备管理器或者其他什么途径随你便) 在系统设备栏中找到Inside Programming SECU-X BUS, 又键单击. 选择UNINSTALL. 到 系统盘:\Program Files\InsPro目录, 全
删除
. 到 系统盘:\windows(winnt)\system32\drivers目录,
删除
SDBUS.SYS和SDDISK.SYS
微信小程序
反
编译
微信小程序
反
编译可以通过对小程序包进行
反
编来获取小程序源码,在一次信息收集的过程中对某公司的APP、微信公众号、小程序进行抓包数据分析寻找接口等有用的信息时,在抓包过程中由于微信的
反
抓包机制实际测试过程中遇到一些问题,导致通过直接抓包的方式抓取小程序数据失败。后通过一些方式了解到小程序
反
编,于是想到是否可以采取这种方式
反
编小程序后进行源码审计。这篇文章主要介绍了微信小程序
反
编的方法在这里与大家进行分享一同学习。...
反
编译c#程序
反
编译c#程序
基于微信小程序渗透-
反
编译小程序
微信小程序渗透时,因为小程序没有网页端页面,所以不能直接访问抓包分析,如果需要抓包分析,那么一般就是用电脑上的安卓模拟器登录微信利用burp抓包、要么就是用burp抓手机的包、要么就是从手机上直接抓包。方式方法有很多种,个人一般用来抓包的工具也就是IOS上用Stream软件,或者是Postman等工具很容易就抓包了。接下来主要介绍的时微信小程序的
反
编译,因为
反
编译出来可以看到小程序的前端源码,可以渗透出更多的东西。
用C++ 实现(程序自杀)
近日看到网友询问如何实现程序运行之后把自己
删除
的方法,用户只要一运行程序,可执行文件就没有了,可是程序还是在跑,胆小的只怕要喊"鬼呀!","老婆,快出来看上帝"甚么的。其实最典型的用法是写
反
安装程序
. 闲来无事,查到一种还算巧妙的“
删除
自己”的方法。 大家都知道,一般的程序运行的时候,可执行文件本身是被操作系统保护的,不能用改写的方式访问,更别提在本身还在运行的时侯
删除
自己了。
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章