软件安装和卸载的问题

Marcelxx 2018-11-26 09:35:16
要做一个和360软件管家类似的功能,做软件下载、安装和卸载。
下载好说,安装只想到一个方法,就是运行安装程序的时候,定时判断安装程序是否结束,因为安装文件和安装运行程序的名字是一样的,很好判断安装程序是否在运行。然后在程序结束后,读取注册表相应的位置判断安装信息是否存在,就此判断安装是否成功。
卸载软件本来是打算采用和安装同样的流程。就是定时判断卸载程序是否结束运行,然后读取注册表的位置,判断是否卸载成功。但是实际应用发现卸载程序可能另外启动一个进程进行的卸载,因此无法根据进程名来进行判断。
因此也就行不通,不知道怎么做了。而且,我觉得我判断安装完成的方法也不是一个好的解决方法。
我想问的就是,对于一个任意软件,点击其安装包,如何判断其是否安装完成【不是是否安装】。和判断其是否卸载完成。
...全文
449 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2018-12-21
  • 打赏
  • 举报
回复
是否考虑注册表,看某程序的安装和卸载是否成功。。。

电脑管家就是如此。。卸载软件后总提示注册表需要清理。。
  • 打赏
  • 举报
回复
引用 10 楼 Marcelxx 的回复:
我现在能想到的比较好的方法就是判断进程树是否结束来判断安装程序是否结束。这种方法对于卸载程序很有效,没什么问题,可以通过判断进程树是否结束来判断卸载操作是否结束。但是安装就可能会有上面的问题。
是的,可能需要对个别的程序进行适配,这种不知程序具体行为的方式确实会存在不兼容的问题。 还有一点就是安装程序需要管理员权限,并且你的程序没有管理员权限的时候。等等各种需要适配的问题。
  • 打赏
  • 举报
回复
引用 8 楼 Marcelxx 的回复:
360是如何判断任意一个软件安装完成和卸载完成的。 我现在实现了另外一种方法,点击安装软件,会启动一个程序,该程序可能会启动其他的程序来执行安装操作。我通过判定进程树是否结束来判断卸载操作是否完成。 但是这个会有其他问题,比如安装完成后点击立即体验,会打开安装完成的程序,这样的话,因为程序树里又有新进程,因此一直无法判断安装是否完成。因此,采用进程树来判断安装和卸载是否完成,会有一些问题在里面。
不会的,安装程序已经结束了,启动的新的程序,不影响安装程序退出。否则做的安装程序脑子有坑。。。
Marcelxx 2018-12-05
  • 打赏
  • 举报
回复
360是如何判断任意一个软件安装完成和卸载完成的。
我现在实现了另外一种方法,点击安装软件,会启动一个程序,该程序可能会启动其他的程序来执行安装操作。我通过判定进程树是否结束来判断卸载操作是否完成。
但是这个会有其他问题,比如安装完成后点击立即体验,会打开安装完成的程序,这样的话,因为程序树里又有新进程,因此一直无法判断安装是否完成。因此,采用进程树来判断安装和卸载是否完成,会有一些问题在里面。
Marcelxx 2018-12-05
  • 打赏
  • 举报
回复
引用 9 楼 zjq9931 的回复:
[quote=引用 8 楼 Marcelxx 的回复:]
360是如何判断任意一个软件安装完成和卸载完成的。
我现在实现了另外一种方法,点击安装软件,会启动一个程序,该程序可能会启动其他的程序来执行安装操作。我通过判定进程树是否结束来判断卸载操作是否完成。
但是这个会有其他问题,比如安装完成后点击立即体验,会打开安装完成的程序,这样的话,因为程序树里又有新进程,因此一直无法判断安装是否完成。因此,采用进程树来判断安装和卸载是否完成,会有一些问题在里面。

不会的,安装程序已经结束了,启动的新的程序,不影响安装程序退出。否则做的安装程序脑子有坑。。。[/quote]
我现在能想到的比较好的方法就是判断进程树是否结束来判断安装程序是否结束。这种方法对于卸载程序很有效,没什么问题,可以通过判断进程树是否结束来判断卸载操作是否结束。但是安装就可能会有上面的问题。
  • 打赏
  • 举报
回复
引用 2 楼 Marcelxx 的回复:
[quote=引用 1 楼 zjq9931 的回复:] 搜索进程间通信的方法。
进程间通信咋个处理呢?任意一个安装软件不可能给我们发消息啊[/quote] 是通过安装程序的命令行安装的对吧? 否则怎么进行操作安装程序的下一步,选择路径,是否同意软件协议这些呢?
Marcelxx 2018-11-26
  • 打赏
  • 举报
回复
引用 1 楼 zjq9931 的回复:
搜索进程间通信的方法。

进程间通信咋个处理呢?任意一个安装软件不可能给我们发消息啊
  • 打赏
  • 举报
回复
搜索进程间通信的方法。
  • 打赏
  • 举报
回复
引用 6 楼 Marcelxx 的回复:
我们只判断是个状态: 1,安装程序是否启动了; 2,安装程序是否结束了;【由于安装程序的名字在进程中会显示,所以可以判断安装程序是否允许结束】 3,卸载程序是否启动;【这个我们不好判断,比如NSIS的卸载程序,程序文件的名字是uninst.exe,但是启动了,会打开另外一个程序执行实际的卸载任务,uninst.exe进程就随即关闭了,在任务管理器中看不到这个程序了。所以,我们就无法判断真正执行卸载任务的进程是否关闭】。 4,卸载程序是否结束了;由于3这个原因和我们无法实际确定执行卸载任务的进程名,就不好判断卸载是否完成了。
嗯,我想复杂了,4楼的方法应当是够了。 1.CreateProcess有句柄的,可以判断; 2.句柄可以判断,等待结束就好,不用轮询之类的方法。 3.搜索注册表,找到所有程序的卸载程序,然后CreateProcess启动卸载程序。 4.同2.
Marcelxx 2018-11-26
  • 打赏
  • 举报
回复
引用 5 楼 Marcelxx 的回复:
[quote=引用 3 楼 zjq9931 的回复:]
[quote=引用 2 楼 Marcelxx 的回复:]
[quote=引用 1 楼 zjq9931 的回复:]
搜索进程间通信的方法。

进程间通信咋个处理呢?任意一个安装软件不可能给我们发消息啊[/quote]
是通过安装程序的命令行安装的对吧?
否则怎么进行操作安装程序的下一步,选择路径,是否同意软件协议这些呢?
[/quote]
我们只是启动安装程序,是否是有界面的那种不管,用户是可以选择下一步这些。[/quote]

我们只判断是个状态:
1,安装程序是否启动了;
2,安装程序是否结束了;【由于安装程序的名字在进程中会显示,所以可以判断安装程序是否允许结束】
3,卸载程序是否启动;【这个我们不好判断,比如NSIS的卸载程序,程序文件的名字是uninst.exe,但是启动了,会打开另外一个程序执行实际的卸载任务,uninst.exe进程就随即关闭了,在任务管理器中看不到这个程序了。所以,我们就无法判断真正执行卸载任务的进程是否关闭】。
4,卸载程序是否结束了;由于3这个原因和我们无法实际确定执行卸载任务的进程名,就不好判断卸载是否完成了。
Marcelxx 2018-11-26
  • 打赏
  • 举报
回复
引用 3 楼 zjq9931 的回复:
[quote=引用 2 楼 Marcelxx 的回复:]
[quote=引用 1 楼 zjq9931 的回复:]
搜索进程间通信的方法。

进程间通信咋个处理呢?任意一个安装软件不可能给我们发消息啊[/quote]
是通过安装程序的命令行安装的对吧?
否则怎么进行操作安装程序的下一步,选择路径,是否同意软件协议这些呢?
[/quote]
我们只是启动安装程序,是否是有界面的那种不管,用户是可以选择下一步这些。
hurryboylqs 2018-11-26
  • 打赏
  • 举报
回复
ShellExcuteEx,WaitForSingleObject

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧