我现在要做一个和360 软件管家差不多的工具,用C#:
需要实现的功能:
1: 软件搬家
2:软件卸载
思路:
1:通过注册表,查找软件信息
32位系统“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall”
64位系统“HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall”
-1:获取软件名称“DisplayName”,
-2:获取软件图标:Icon.ExtractAssociatedIcon(REG("DisplayICon")).ToBitmap();(”并不是所有的图标都正确得到,可以得到dll,exe的图标,注册表的Icon字符串需要处理“)
-3:获取软件厂商("Publisher"),软件版本("DisplayVersion"),卸载字符串("UninstallString")等信息。
2:通过卸载字符串,调用cmd命令执行卸载字符串进行软件卸载,通过"junction.exe",先将软件目录移动到一个指定位置,然后进行文件地址映射,实现软件移动的功能。
现在遇到的问题,
1.怎么得到软件的安装位置,得到的软件列表要和控制面板卸载列表一样的?要是软件比如Office,里面有多个组件怎么处理?
2.有什么方法可以得到软件图标?
3.360的软件搬家的列表界面用什么控件实现?(没找到合适的,准备用wpf。)
4.软件搬家有没有其他的实现方式。
解决了,加分
59 个解决方案
#1
#2
#3
c#不适合开发病毒..
#4
c#不适合开发病毒..
#5
建议使用VC6.0 MFC WINAPI
#6
不是我想。。。公司的叫我做这么个玩意儿
#7
告诉你们老大,给我分配跟360团队同样的人手,我就给你做
#8
先去找找看看有没有开源的方案,学习一下思路。这是大CASE
#9
这个听上去很高大上,帮你U盘一下。
#10
c#不适合开发病毒.. c#不适合开发病毒..
不是我想。。。公司的叫我做这么个玩意儿
告诉你们老大,给我分配跟360团队同样的人手,我就给你做
。。。。苦逼。。。
#11
这个听上去很高大上,帮你U盘一下。
求解决方案
#12
为什么没人理我!!!!!
顶!!!
顶!!!
#14
告诉你,除了软件开发商,没有人能做出通用的"软件搬家""软件卸载"。这种违背技术常识的事情,也只有做病毒的360能实现。
#15
界面案例:
1. [精仿]360手机助手-14.2.6更新(CSkin Demo)
2. [精仿]360安全卫士-10.30更新(CSkin Demo)
虽说这个界面还是可以,这个界面和我要得一点关系都没有啊
#16
告诉你,除了软件开发商,没有人能做出通用的"软件搬家""软件卸载"。这种违背技术常识的事情,也只有做病毒的360能实现。
版主啊。。说的我都没信心了,我是不是要滚蛋了??
这个软件搬家金山,腾讯,都有做啊,我不需要做得和360 一样的强大,软件搬家实现这个功能就好!
#17
#18
你几年工作经验
#19
告诉你,除了软件开发商,没有人能做出通用的"软件搬家""软件卸载"。这种违背技术常识的事情,也只有做病毒的360能实现。
版主啊。。说的我都没信心了,我是不是要滚蛋了??
这个软件搬家金山,腾讯,都有做啊,我不需要做得和360 一样的强大,软件搬家实现这个功能就好!
要你滚蛋什么意思?你做不出来,公司就开除你吗?如果是这样,你放心,相继开除的人会一连串的,都说了,这不是一个人的“战斗”,而且 C# 在我看来不是一个不会对系统形成威胁行为的语言,他是正义的 ,请楼主不要用一门正义的语言去做一件邪恶的事情。如果是领导强制要你做,那他的设想有点问题。你看到的事实是 360 是可以做,但 360 不是 .NET 开发的。有些东西,用特定的工具去做,会不太可能。
#20
来看看,这个看起来很难的样子
#21
更正:……不是一个会对系统形成威胁行为的语言……
#22
实现软件搬家,说起来简单
软件整个挪过去,修改所有相关注册表信息和快捷方式路径,搬家完成.
软件整个挪过去,修改所有相关注册表信息和快捷方式路径,搬家完成.
#23
问题是,360本身是做杀毒的,金山也是做杀毒的,腾讯也有杀毒
它们自己修改注册表当然没问题
你的程序想修改,会被当做病毒干掉的
它们自己修改注册表当然没问题
你的程序想修改,会被当做病毒干掉的
#24
更正:……不是一个会对系统形成威胁行为的语言……
被干掉是不会的,因为做出来之后也是在公司内特定的系统上使用,所有行为是会被允许的,现在主要是实现方式
#25
仅仅表达一下我的看法。
这个软件,如果当做练手的话,做一做还行,但是要当做个产品来做的话,那就是看起来不容易啊,做起来也不容易,后期维护还是不容易呢。
从注册表里面取出软件的安装信息,反安装信息啥的,这都可以做到,不过能拿到这些信息的只是电脑中所安装的软件中的一部分。如果还要对付那些病毒文件,流氓文件啥的,那咱就哭吧。还有些软件是不在注册表留信息的,这怎么办?就得建立一个 数据库,里面保存好特征文件名,反安装方法啥的,然后全盘扫描磁盘,一个一个跟数据库去比对,才能得到删除或者移动软件所需要的信息。这就是不容易的地方了,数据库啊数据库,里面的数据谁维护?如果你们老板肯掏钱让360来维护的话,那就不如让360为你们公司再定制一个新软件了。
这个软件,如果当做练手的话,做一做还行,但是要当做个产品来做的话,那就是看起来不容易啊,做起来也不容易,后期维护还是不容易呢。
从注册表里面取出软件的安装信息,反安装信息啥的,这都可以做到,不过能拿到这些信息的只是电脑中所安装的软件中的一部分。如果还要对付那些病毒文件,流氓文件啥的,那咱就哭吧。还有些软件是不在注册表留信息的,这怎么办?就得建立一个 数据库,里面保存好特征文件名,反安装方法啥的,然后全盘扫描磁盘,一个一个跟数据库去比对,才能得到删除或者移动软件所需要的信息。这就是不容易的地方了,数据库啊数据库,里面的数据谁维护?如果你们老板肯掏钱让360来维护的话,那就不如让360为你们公司再定制一个新软件了。
#26
仅仅表达一下我的看法。
这个软件,如果当做练手的话,做一做还行,但是要当做个产品来做的话,那就是看起来不容易啊,做起来也不容易,后期维护还是不容易呢。
从注册表里面取出软件的安装信息,反安装信息啥的,这都可以做到,不过能拿到这些信息的只是电脑中所安装的软件中的一部分。如果还要对付那些病毒文件,流氓文件啥的,那咱就哭吧。还有些软件是不在注册表留信息的,这怎么办?就得建立一个 数据库,里面保存好特征文件名,反安装方法啥的,然后全盘扫描磁盘,一个一个跟数据库去比对,才能得到删除或者移动软件所需要的信息。这就是不容易的地方了,数据库啊数据库,里面的数据谁维护?如果你们老板肯掏钱让360来维护的话,那就不如让360为你们公司再定制一个新软件了。
360 难道说是这个原理实现吗? 我只要实现控制面板能看到的,并且在C盘的软件可以搬家就行了
#27
如果仅仅是做着玩的话,那么访问注册表就是用
.Net类库里面的 Microsoft.Win32名称空间里面的Registry和RegistryKey吧,他们基本上可以完成读注册表和写注册表的操作。
.Net类库里面的 Microsoft.Win32名称空间里面的Registry和RegistryKey吧,他们基本上可以完成读注册表和写注册表的操作。
#28
简单点把软件安装文件从一个目录copy到另一个目录,创建一个新的快捷方式指向新的目录。告诉老板做完了
#29
简单点把软件安装文件从一个目录copy到另一个目录,创建一个新的快捷方式指向新的目录。告诉老板做完了
除非是绿色版的软件,否则不改注册表运行不起来了
#30
比如数据库,要打成服务运行的,你把安装文件挪走了,服务还能启动?
#31
#32
估计是注册表吧。。。
mfc能做的winform都能做 winapi能做的p/invoke都能做
mfc能做的winform都能做 winapi能做的p/invoke都能做
#33
还是很好奇怎样的“公司内特定系统上”需要这个功能。写个脚本卸了再重装软件不好吗?
#34
Junction.
#35
其实软件的安装、卸载程序一般都比较简单,一般都是写注册表。原理大概是这样:
使用注册表监视、或快照工具,在安装前扫描一遍,然后安装,再扫描比对,一些安装制作工具可以自动生成新的安装包。用这个方法可以实现静默的安装卸载,做不了的就调用软件自身带的卸载程序( 其实360里卸载很多软件还是跳出原来的安装程序,可见这部份是没有处理或待处理的 ),另外一些安装卸载程序支持带参数的静默处理,例如MSI。
不过在win7上安装程序会跳出UAC警告,如果要批量安装不停的弹这个不是个事吧,所以一般可以注册个后台服务干这事,调用后台服务安装卸载,但是现在注册后台服务一般会被360自动优化成禁用,另外一个方法是自己启动就申请管理权限,这个需要弄个数字证书不然吓到小白了。
软件的卸载程序会写在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下面,其中每个子键里有一个值 记录在 UninstallString 下面,这里面包含了卸载程序和调用参数。
一个例子,列出所有卸载程序(AAuto源码):
另外可以在MUICache,快捷方式里找到没有写到注册表的软件,快捷方式一般 出现在以下位置:桌面目录,共享桌面目录,程序组目录,共享程序组目录,在win7下如果锁定到任务栏或开始菜单快捷方式还会出现在 C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned 下面, 举个例子(AAuto源码):
安装卸载还需要做的一件事就是创建、删除一堆的快捷方式,这个调用 IShellLink 也很简单,用 AAuto代码举一个例子:
都非常简单。
使用注册表监视、或快照工具,在安装前扫描一遍,然后安装,再扫描比对,一些安装制作工具可以自动生成新的安装包。用这个方法可以实现静默的安装卸载,做不了的就调用软件自身带的卸载程序( 其实360里卸载很多软件还是跳出原来的安装程序,可见这部份是没有处理或待处理的 ),另外一些安装卸载程序支持带参数的静默处理,例如MSI。
不过在win7上安装程序会跳出UAC警告,如果要批量安装不停的弹这个不是个事吧,所以一般可以注册个后台服务干这事,调用后台服务安装卸载,但是现在注册后台服务一般会被360自动优化成禁用,另外一个方法是自己启动就申请管理权限,这个需要弄个数字证书不然吓到小白了。
软件的卸载程序会写在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下面,其中每个子键里有一个值 记录在 UninstallString 下面,这里面包含了卸载程序和调用参数。
一个例子,列出所有卸载程序(AAuto源码):
import console;
import win.reg;
var reg = ..win.regReader("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
for(soft in reg.eachKey() ){
var regUnist = reg.openReg(soft);
console.log(regUnist.queryValue("DisplayName"),regUnist.queryValue("UninstallString") );
regUnist.close();
}
另外可以在MUICache,快捷方式里找到没有写到注册表的软件,快捷方式一般 出现在以下位置:桌面目录,共享桌面目录,程序组目录,共享程序组目录,在win7下如果锁定到任务栏或开始菜单快捷方式还会出现在 C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned 下面, 举个例子(AAuto源码):
import fsys.lnk;
import process.cache;
import fsys.version;
import console;
//查找sublime路径
var sublime = process.cache.find( ,"Sublime Text") || fsys.lnk.search("sublime" ) ;
if( sublime ){
var versionInfo = fsys.version.getInfo(sublime);
console.log("软件路径",sublime)
console.log("软件名称",versionInfo.productName);
console.log("软件版本",versionInfo.productVersion)
console.log("软件说明",versionInfo.fileDescription)
console.log("软件安装目录",fsys.getParentDir(sublime))
//关闭该软件所有打开的进程,并准备删除
import process.file;
fsys.enum( fsys.getParentDir(sublime), "*.exe",
function(dir,filename,fullpath,findData){
if(filename){
process.file.terminate(fullpath);//关闭进程,避免文件占用
}
}
);
}
安装卸载还需要做的一件事就是创建、删除一堆的快捷方式,这个调用 IShellLink 也很简单,用 AAuto代码举一个例子:
import fsys.shortcut;
var shorcut = fsys.shortcut("");
//创建所有快捷方式
shorcut.create(
lnk = io._exepath;
taskBar = true; //锁定到任务栏
startMenu = false; //锁定到开始菜单
desktop = true; //添加到桌面
programsFolder = "\公司名\"; //添加到开始菜单程序组
allUsers = false;
)
//卸载所有快捷方式
shorcut.delete(
lnk = io._exepath;
taskBar = true; //锁定到任务栏
startMenu = false; //锁定到开始菜单
desktop = true; //添加到桌面
programsFolder = "\公司名\"; //添加到开始菜单程序组
allUsers = false;
)
都非常简单。
#36
C# / C++ 用 WINAPI(__stdcall) 来做把
#37
有点复杂吧。。。
#38
简单点把软件安装文件从一个目录copy到另一个目录,创建一个新的快捷方式指向新的目录。告诉老板做完了
除非是绿色版的软件,否则不改注册表运行不起来了
直接搬肯定是不行的,所以有个添加文件夹映射的步骤
#39
小弟也算是毕业一年了,还是混日子的
#40
不懂啊!一窍不通
#41
六七年前用VB写的程序写过。
程序的主要功能,启动项优划,服务项清理,垃圾清理,插件清理,窗口管理(一键隐藏窗口(那时候用这个功能挂机,上班挂机网游,挂了半年多。))。那时候还没有360,。(软件最终连版权一起卖了)
那时跟踪注册表是用的卡巴斯基。
以前为了实现打开注册表直接显示自己设置的那一项。这个简单的功能,自己用卡巴斯基跟踪了一个星期。
上次看360打开注册,直接显示某一项的功能,还是用的模拟鼠标点击,展开的方法。
楼主的这些主要的就是一些注册的操作。
比如:软件的安装位置 这个在注册表里有一个固定的地方。具体哪个地方网上搜一搜多的事。
程序的主要功能,启动项优划,服务项清理,垃圾清理,插件清理,窗口管理(一键隐藏窗口(那时候用这个功能挂机,上班挂机网游,挂了半年多。))。那时候还没有360,。(软件最终连版权一起卖了)
那时跟踪注册表是用的卡巴斯基。
以前为了实现打开注册表直接显示自己设置的那一项。这个简单的功能,自己用卡巴斯基跟踪了一个星期。
上次看360打开注册,直接显示某一项的功能,还是用的模拟鼠标点击,展开的方法。
楼主的这些主要的就是一些注册的操作。
比如:软件的安装位置 这个在注册表里有一个固定的地方。具体哪个地方网上搜一搜多的事。
#42
360那个东西太强大了,强大到,我用了C盘搬家之后,我不得不重装了系统。开机只需要5分钟。而我没用之前,开机15秒搞定。
#43
从注册表里面取出软件的安装信息,这个不一定能提取全啊,有的软件安装不通过注册表的
#44
直接下载个360 然后用winapi 弄掉程序标题什么的 比你自己写实在多了。
#45
真要自己做还是可以的 就是界面麻烦点
#46
#47
360那个东西太强大了,强大到,我用了C盘搬家之后,我不得不重装了系统。开机只需要5分钟。而我没用之前,开机15秒搞定。
是不是你把不应该搬家的搬家了 ?有些软件不建议搬家的,搬完增加其寻址的时间,就降低了其速度
#48
直接下载个360 然后用winapi 弄掉程序标题什么的 比你自己写实在多了。
想法不错,可是小弟不会c++。。。
#49
这个还是用C++吧
#50
360那个东西太强大了,强大到,我用了C盘搬家之后,我不得不重装了系统。开机只需要5分钟。而我没用之前,开机15秒搞定。
难道你把整个C盘给搬走了?
搬家只适用于你不小心将用户程序装到C盘,导致系统盘不太够用的情况
如果你连系统本身都搬走,还不如一开始就将系统安装到别的盘
#1
#2
#3
c#不适合开发病毒..
#4
c#不适合开发病毒..
#5
建议使用VC6.0 MFC WINAPI
#6
c#不适合开发病毒..
c#不适合开发病毒..
不是我想。。。公司的叫我做这么个玩意儿
#7
c#不适合开发病毒.. c#不适合开发病毒..
不是我想。。。公司的叫我做这么个玩意儿
告诉你们老大,给我分配跟360团队同样的人手,我就给你做
#8
先去找找看看有没有开源的方案,学习一下思路。这是大CASE
#9
这个听上去很高大上,帮你U盘一下。
#10
c#不适合开发病毒.. c#不适合开发病毒..
不是我想。。。公司的叫我做这么个玩意儿
告诉你们老大,给我分配跟360团队同样的人手,我就给你做
。。。。苦逼。。。
#11
这个听上去很高大上,帮你U盘一下。
求解决方案
#12
为什么没人理我!!!!!
顶!!!
顶!!!
#13
#14
告诉你,除了软件开发商,没有人能做出通用的"软件搬家""软件卸载"。这种违背技术常识的事情,也只有做病毒的360能实现。
#15
界面案例:
1. [精仿]360手机助手-14.2.6更新(CSkin Demo)
2. [精仿]360安全卫士-10.30更新(CSkin Demo)
虽说这个界面还是可以,这个界面和我要得一点关系都没有啊
#16
告诉你,除了软件开发商,没有人能做出通用的"软件搬家""软件卸载"。这种违背技术常识的事情,也只有做病毒的360能实现。
版主啊。。说的我都没信心了,我是不是要滚蛋了??
这个软件搬家金山,腾讯,都有做啊,我不需要做得和360 一样的强大,软件搬家实现这个功能就好!
#17
#18
你几年工作经验
#19
告诉你,除了软件开发商,没有人能做出通用的"软件搬家""软件卸载"。这种违背技术常识的事情,也只有做病毒的360能实现。
版主啊。。说的我都没信心了,我是不是要滚蛋了??
这个软件搬家金山,腾讯,都有做啊,我不需要做得和360 一样的强大,软件搬家实现这个功能就好!
要你滚蛋什么意思?你做不出来,公司就开除你吗?如果是这样,你放心,相继开除的人会一连串的,都说了,这不是一个人的“战斗”,而且 C# 在我看来不是一个不会对系统形成威胁行为的语言,他是正义的 ,请楼主不要用一门正义的语言去做一件邪恶的事情。如果是领导强制要你做,那他的设想有点问题。你看到的事实是 360 是可以做,但 360 不是 .NET 开发的。有些东西,用特定的工具去做,会不太可能。
#20
来看看,这个看起来很难的样子
#21
更正:……不是一个会对系统形成威胁行为的语言……
#22
实现软件搬家,说起来简单
软件整个挪过去,修改所有相关注册表信息和快捷方式路径,搬家完成.
软件整个挪过去,修改所有相关注册表信息和快捷方式路径,搬家完成.
#23
问题是,360本身是做杀毒的,金山也是做杀毒的,腾讯也有杀毒
它们自己修改注册表当然没问题
你的程序想修改,会被当做病毒干掉的
它们自己修改注册表当然没问题
你的程序想修改,会被当做病毒干掉的
#24
更正:……不是一个会对系统形成威胁行为的语言……
被干掉是不会的,因为做出来之后也是在公司内特定的系统上使用,所有行为是会被允许的,现在主要是实现方式
#25
仅仅表达一下我的看法。
这个软件,如果当做练手的话,做一做还行,但是要当做个产品来做的话,那就是看起来不容易啊,做起来也不容易,后期维护还是不容易呢。
从注册表里面取出软件的安装信息,反安装信息啥的,这都可以做到,不过能拿到这些信息的只是电脑中所安装的软件中的一部分。如果还要对付那些病毒文件,流氓文件啥的,那咱就哭吧。还有些软件是不在注册表留信息的,这怎么办?就得建立一个 数据库,里面保存好特征文件名,反安装方法啥的,然后全盘扫描磁盘,一个一个跟数据库去比对,才能得到删除或者移动软件所需要的信息。这就是不容易的地方了,数据库啊数据库,里面的数据谁维护?如果你们老板肯掏钱让360来维护的话,那就不如让360为你们公司再定制一个新软件了。
这个软件,如果当做练手的话,做一做还行,但是要当做个产品来做的话,那就是看起来不容易啊,做起来也不容易,后期维护还是不容易呢。
从注册表里面取出软件的安装信息,反安装信息啥的,这都可以做到,不过能拿到这些信息的只是电脑中所安装的软件中的一部分。如果还要对付那些病毒文件,流氓文件啥的,那咱就哭吧。还有些软件是不在注册表留信息的,这怎么办?就得建立一个 数据库,里面保存好特征文件名,反安装方法啥的,然后全盘扫描磁盘,一个一个跟数据库去比对,才能得到删除或者移动软件所需要的信息。这就是不容易的地方了,数据库啊数据库,里面的数据谁维护?如果你们老板肯掏钱让360来维护的话,那就不如让360为你们公司再定制一个新软件了。
#26
仅仅表达一下我的看法。
这个软件,如果当做练手的话,做一做还行,但是要当做个产品来做的话,那就是看起来不容易啊,做起来也不容易,后期维护还是不容易呢。
从注册表里面取出软件的安装信息,反安装信息啥的,这都可以做到,不过能拿到这些信息的只是电脑中所安装的软件中的一部分。如果还要对付那些病毒文件,流氓文件啥的,那咱就哭吧。还有些软件是不在注册表留信息的,这怎么办?就得建立一个 数据库,里面保存好特征文件名,反安装方法啥的,然后全盘扫描磁盘,一个一个跟数据库去比对,才能得到删除或者移动软件所需要的信息。这就是不容易的地方了,数据库啊数据库,里面的数据谁维护?如果你们老板肯掏钱让360来维护的话,那就不如让360为你们公司再定制一个新软件了。
360 难道说是这个原理实现吗? 我只要实现控制面板能看到的,并且在C盘的软件可以搬家就行了
#27
如果仅仅是做着玩的话,那么访问注册表就是用
.Net类库里面的 Microsoft.Win32名称空间里面的Registry和RegistryKey吧,他们基本上可以完成读注册表和写注册表的操作。
.Net类库里面的 Microsoft.Win32名称空间里面的Registry和RegistryKey吧,他们基本上可以完成读注册表和写注册表的操作。
#28
简单点把软件安装文件从一个目录copy到另一个目录,创建一个新的快捷方式指向新的目录。告诉老板做完了
#29
简单点把软件安装文件从一个目录copy到另一个目录,创建一个新的快捷方式指向新的目录。告诉老板做完了
除非是绿色版的软件,否则不改注册表运行不起来了
#30
比如数据库,要打成服务运行的,你把安装文件挪走了,服务还能启动?
#31
#32
估计是注册表吧。。。
mfc能做的winform都能做 winapi能做的p/invoke都能做
mfc能做的winform都能做 winapi能做的p/invoke都能做
#33
还是很好奇怎样的“公司内特定系统上”需要这个功能。写个脚本卸了再重装软件不好吗?
#34
Junction.
#35
其实软件的安装、卸载程序一般都比较简单,一般都是写注册表。原理大概是这样:
使用注册表监视、或快照工具,在安装前扫描一遍,然后安装,再扫描比对,一些安装制作工具可以自动生成新的安装包。用这个方法可以实现静默的安装卸载,做不了的就调用软件自身带的卸载程序( 其实360里卸载很多软件还是跳出原来的安装程序,可见这部份是没有处理或待处理的 ),另外一些安装卸载程序支持带参数的静默处理,例如MSI。
不过在win7上安装程序会跳出UAC警告,如果要批量安装不停的弹这个不是个事吧,所以一般可以注册个后台服务干这事,调用后台服务安装卸载,但是现在注册后台服务一般会被360自动优化成禁用,另外一个方法是自己启动就申请管理权限,这个需要弄个数字证书不然吓到小白了。
软件的卸载程序会写在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下面,其中每个子键里有一个值 记录在 UninstallString 下面,这里面包含了卸载程序和调用参数。
一个例子,列出所有卸载程序(AAuto源码):
另外可以在MUICache,快捷方式里找到没有写到注册表的软件,快捷方式一般 出现在以下位置:桌面目录,共享桌面目录,程序组目录,共享程序组目录,在win7下如果锁定到任务栏或开始菜单快捷方式还会出现在 C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned 下面, 举个例子(AAuto源码):
安装卸载还需要做的一件事就是创建、删除一堆的快捷方式,这个调用 IShellLink 也很简单,用 AAuto代码举一个例子:
都非常简单。
使用注册表监视、或快照工具,在安装前扫描一遍,然后安装,再扫描比对,一些安装制作工具可以自动生成新的安装包。用这个方法可以实现静默的安装卸载,做不了的就调用软件自身带的卸载程序( 其实360里卸载很多软件还是跳出原来的安装程序,可见这部份是没有处理或待处理的 ),另外一些安装卸载程序支持带参数的静默处理,例如MSI。
不过在win7上安装程序会跳出UAC警告,如果要批量安装不停的弹这个不是个事吧,所以一般可以注册个后台服务干这事,调用后台服务安装卸载,但是现在注册后台服务一般会被360自动优化成禁用,另外一个方法是自己启动就申请管理权限,这个需要弄个数字证书不然吓到小白了。
软件的卸载程序会写在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下面,其中每个子键里有一个值 记录在 UninstallString 下面,这里面包含了卸载程序和调用参数。
一个例子,列出所有卸载程序(AAuto源码):
import console;
import win.reg;
var reg = ..win.regReader("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
for(soft in reg.eachKey() ){
var regUnist = reg.openReg(soft);
console.log(regUnist.queryValue("DisplayName"),regUnist.queryValue("UninstallString") );
regUnist.close();
}
另外可以在MUICache,快捷方式里找到没有写到注册表的软件,快捷方式一般 出现在以下位置:桌面目录,共享桌面目录,程序组目录,共享程序组目录,在win7下如果锁定到任务栏或开始菜单快捷方式还会出现在 C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned 下面, 举个例子(AAuto源码):
import fsys.lnk;
import process.cache;
import fsys.version;
import console;
//查找sublime路径
var sublime = process.cache.find( ,"Sublime Text") || fsys.lnk.search("sublime" ) ;
if( sublime ){
var versionInfo = fsys.version.getInfo(sublime);
console.log("软件路径",sublime)
console.log("软件名称",versionInfo.productName);
console.log("软件版本",versionInfo.productVersion)
console.log("软件说明",versionInfo.fileDescription)
console.log("软件安装目录",fsys.getParentDir(sublime))
//关闭该软件所有打开的进程,并准备删除
import process.file;
fsys.enum( fsys.getParentDir(sublime), "*.exe",
function(dir,filename,fullpath,findData){
if(filename){
process.file.terminate(fullpath);//关闭进程,避免文件占用
}
}
);
}
安装卸载还需要做的一件事就是创建、删除一堆的快捷方式,这个调用 IShellLink 也很简单,用 AAuto代码举一个例子:
import fsys.shortcut;
var shorcut = fsys.shortcut("");
//创建所有快捷方式
shorcut.create(
lnk = io._exepath;
taskBar = true; //锁定到任务栏
startMenu = false; //锁定到开始菜单
desktop = true; //添加到桌面
programsFolder = "\公司名\"; //添加到开始菜单程序组
allUsers = false;
)
//卸载所有快捷方式
shorcut.delete(
lnk = io._exepath;
taskBar = true; //锁定到任务栏
startMenu = false; //锁定到开始菜单
desktop = true; //添加到桌面
programsFolder = "\公司名\"; //添加到开始菜单程序组
allUsers = false;
)
都非常简单。
#36
C# / C++ 用 WINAPI(__stdcall) 来做把
#37
有点复杂吧。。。
#38
简单点把软件安装文件从一个目录copy到另一个目录,创建一个新的快捷方式指向新的目录。告诉老板做完了
除非是绿色版的软件,否则不改注册表运行不起来了
直接搬肯定是不行的,所以有个添加文件夹映射的步骤
#39
小弟也算是毕业一年了,还是混日子的
#40
不懂啊!一窍不通
#41
六七年前用VB写的程序写过。
程序的主要功能,启动项优划,服务项清理,垃圾清理,插件清理,窗口管理(一键隐藏窗口(那时候用这个功能挂机,上班挂机网游,挂了半年多。))。那时候还没有360,。(软件最终连版权一起卖了)
那时跟踪注册表是用的卡巴斯基。
以前为了实现打开注册表直接显示自己设置的那一项。这个简单的功能,自己用卡巴斯基跟踪了一个星期。
上次看360打开注册,直接显示某一项的功能,还是用的模拟鼠标点击,展开的方法。
楼主的这些主要的就是一些注册的操作。
比如:软件的安装位置 这个在注册表里有一个固定的地方。具体哪个地方网上搜一搜多的事。
程序的主要功能,启动项优划,服务项清理,垃圾清理,插件清理,窗口管理(一键隐藏窗口(那时候用这个功能挂机,上班挂机网游,挂了半年多。))。那时候还没有360,。(软件最终连版权一起卖了)
那时跟踪注册表是用的卡巴斯基。
以前为了实现打开注册表直接显示自己设置的那一项。这个简单的功能,自己用卡巴斯基跟踪了一个星期。
上次看360打开注册,直接显示某一项的功能,还是用的模拟鼠标点击,展开的方法。
楼主的这些主要的就是一些注册的操作。
比如:软件的安装位置 这个在注册表里有一个固定的地方。具体哪个地方网上搜一搜多的事。
#42
360那个东西太强大了,强大到,我用了C盘搬家之后,我不得不重装了系统。开机只需要5分钟。而我没用之前,开机15秒搞定。
#43
从注册表里面取出软件的安装信息,这个不一定能提取全啊,有的软件安装不通过注册表的
#44
直接下载个360 然后用winapi 弄掉程序标题什么的 比你自己写实在多了。
#45
真要自己做还是可以的 就是界面麻烦点
#46
#47
360那个东西太强大了,强大到,我用了C盘搬家之后,我不得不重装了系统。开机只需要5分钟。而我没用之前,开机15秒搞定。
是不是你把不应该搬家的搬家了 ?有些软件不建议搬家的,搬完增加其寻址的时间,就降低了其速度
#48
直接下载个360 然后用winapi 弄掉程序标题什么的 比你自己写实在多了。
想法不错,可是小弟不会c++。。。
#49
这个还是用C++吧
#50
360那个东西太强大了,强大到,我用了C盘搬家之后,我不得不重装了系统。开机只需要5分钟。而我没用之前,开机15秒搞定。
难道你把整个C盘给搬走了?
搬家只适用于你不小心将用户程序装到C盘,导致系统盘不太够用的情况
如果你连系统本身都搬走,还不如一开始就将系统安装到别的盘