
主程序,指的是运行后,会直接开始执行软件功能的程序。注意与启动器的区分,启动器间接运行了主程序。
启动器,指的是软件并不通过主程序来运行,而是通过其他程序间接运行主程序。常见用于各类学习版游戏,通过启动器让你看一波广告。
开机启动项,被添加到启动项的内容,在开机后会自动运行。Windows 默认情况下,在启动目录(C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)下的程序、注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run)下的程序,以及系统服务中的项目,会被开机自启动。
系统服务,按组合键 Win + R,输入 services.msc,确定,即可看到系统服务。你可以把它们看成是一些进程,只是他们没有窗口,并且用户进程在用户不登录的时候会停止运行,而服务依旧会运行。

注册表,这个我有讲哦,参见《漫谈注册表(Registry)》。
数据目录,指的是存放软件的一些设置等的目录,微软建议在 C:\ProgramData、C:\Users\用户名\AppData\Roaming 等目录存放它们。但注意,是建议不是必须,因为开发者都是一群随心所欲的人,因此数据目录是不固定的。
临时目录,指的是存放临时文件的目录,如下载、解压文件产生的碎片等,微软建议在 C:\Users\用户名\AppData\Local\Temp 存放它们。
那么,装一个软件,对我们的系统有什么影响呢?
一、安装版: 通常我们下的软件多是安装版,一个安装包双击运行然后选择安装位置,剩下的就交给安装包自己去完成。这种无脑操作,图的就是一个省事,为的就是一个字, 爽 。 我从官网下了一个 QQ,安装它。
一般人会去点立即安装,等你看完本文,我希望你以后先点自定义选项。

此时我们可以修改安装路径,我不建议你去点浏览按钮然后选择安装路径。因为你们经常会干这样一件蠢事,创建一个叫软件或者游戏的文件夹,然后把软件和游戏安装到下面。

请记住一句话,你所用的系统是老外开发的,你所用的软件的开发语言也是老外创造的,甚至你所用的软件也可能是老外设计的,不是每一个老外都认识中文。
那么安装路径怎么设置呢?我推荐的做法是把 C 直接改 D。大多数情况下,路径选择框是一个文本框,这使得你可以按退格键就把 C 删掉,然后手打一个 D 上去。
这样一来所安装的所有软件都会在 D 盘的这俩目录下。

打开以后也看着特别整齐,一个文件夹对应一个软件。




软件信息
显示名称: 腾讯QQ
出版商: 腾讯科技(深圳)有限公司
版本:9.2.5.26724
注册表项:269
文件:836
总大小:305.2 MB
安装日期:2020/4/11 22:40:11
安装包:C:\Users\muruoxi\Downloads\Programs\PCQQ2020.exe
目录:D:\Program Files (x86)\Tencent\QQ\
安装持续时间:64 seconds
注册表值
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Ext\Stats\{98F22D0A-B97F-4AF4-8E4C-A6596C8CDD4C}\iexplore\AllowedDomains\*
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{98F22D0A-B97F-4AF4-8E4C-A6596C8CDD4C}\iexplore\AllowedDomains
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{98F22D0A-B97F-4AF4-8E4C-A6596C8CDD4C}\iexplore
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQPet\shell\open\command|Value|(Default)
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQPet\shell\open\command
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQPet\shell\open
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQPet\shell
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQPet|Value|URL Protocol
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQPet
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent\DefaultIcon|Value|(Default)
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent\DefaultIcon
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent\shell\open\command|Value|(Default)
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent\shell\open\command
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent\shell\open
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent\shell
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent|Value|(Default)
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent|Value|URL Protocol
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Tencent
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\QPCore|Value|{6970596B-87AC-48de-893E-B9436C58CEA4}
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\QPCore|Value|{6970596B-87AC-48de-893E-B9436C58CEB5}
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\QPCore|Value|{6970596B-87AC-48de-893E-B9436C58CEC6}
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\QPCore|Value|InitErrorCode
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\QPCore|Value|PerfCounter
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\QPCore|Value|QQProtectDir
文件
C:\Program Files (x86)\Common Files\Tencent\*
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\腾讯软件\QQ
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\腾讯软件\QQ\腾讯QQ.lnk
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\腾讯软件\QQ\卸载腾讯QQ.lnk
C:\ProgramData\NVIDIA Corporation\Drs\nvdrsdb0.bin
C:\ProgramData\NVIDIA Corporation\Drs\nvdrssel.bin
C:\Users\muruoxi\AppData\Local\Temp\TXSSO_20200411_223948
C:\Users\muruoxi\AppData\Local\Temp\TXSSO_20200411_223948\TXSSO
C:\Users\muruoxi\AppData\Local\Temp\TXSSO_20200411_223948\TXSSO\I18N
C:\Users\muruoxi\AppData\Roaming\9A8vG7T7.tmp
C:\Users\muruoxi\AppData\Roaming\Tencent\*
C:\Users\Public\Desktop\腾讯QQ.lnk
C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini
C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\Tencent\Logs\QQProtect.tlg
C:\Windows\Temp\43FB.tmp
C:\Windows\Temp\43FC.tmp
D:\Program Files (x86)\Tencent\QQ\*
我们可以看到,一共创建了 836 个文件,增加了 269 项注册表,上述注册表值和文件皆为节选的部分。
现在想想,如果没有卸载功能,你自己去手动删除这些文件来卸载 QQ,得多麻烦。
怎么卸载呢?按组合键
Win + X
,选择
应用和功能
。
找到 QQ,
卸载
。


一般而言免安装版都是基于安装版提取出来的,解压后就能用了,所以不需要添加额外的注册表。
当然如果你把 QQ 提取成免安装版,那也是需要写入一定的注册表的。
毕竟注册表中存放了一些 QQ 运行必须的配置信息,如消息文件的路径啊,缓存的位置啊等。没有这些配置数据的话,它就运行不起来。
还记着我那会儿说,不要在安装完软件了,再去改它的安装目录名字吗?
假如之前注册表里记录了,软件的某个重要文件在 D盘的 GuGuJing 文件夹,你把它改成了 咕咕精,但你没有改动注册表里的记录,那么这个软件工作还正常吗?
来看一个免安装版的 MvBoxPlayer 吧,这个软件我之前提到过,参见《办公协同?远程教育?这一届的孩子太惨了》。
下载安装包解压来看看,如下图。

可以看到它附带有一个"!绿化.bat",.bat 是批处理文件的格式后缀,!在这里起的作用是将这个文件相对置顶,因为在资源管理器中,默认情况下,符号开头的文件是排在其他文件名前面的,这样一来 绿化.bat 就变得显眼了。
打开这个 bat 文件,观察其内容:
@ECHO OFF & CD /D %~DP0 & TITLE 绿化
>NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
ECHO UAC.ShellExecute "%~f0", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
"%TEMP%\Getadmin.vbs"
DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL
Exit /b
)
taskkill /f /im MvBox* >NUL 2>NUL
rd/s/q "%AppData%\mvbox\PicAd" 2>NUL
del/q "%AppData%\mvbox\ad*">NUL 2>NUL
regsvr32 /s VCam.ax iVCam_inst.ax d3com.dll
regsvr32 /s qasf.dll qedit.dll quartz.dll WMADMOD.DLL
regsvr32 /s ffdshow\ffdshow.ax
regsvr32 /s Filters\DC-BASS\DCBassSource.ax
for %%a in (Filters\*.ax) do regsvr32 /s %%a
for %%a in (LAVFilters\*.ax) do regsvr32 /s %%a
reg add HKCU\Software\MvBox\LiveUpdate\Products\MvBoxPlayer /f /v InstallPath /d "%~dp0\" >NUL 2>NUL
reg add HKCU\Software\MvBox\LiveUpdate\Products\MvBoxPlayer /f /v Login /t REG_DWORD /d 1 >NUL 2>NUL
reg add HKCU\Software\MvBox\LiveUpdate\Products\MvBoxPlayer /f /v ProductID /t REG_DWORD /d 0 >NUL 2>NUL
reg add HKCU\Software\MvBox\LiveUpdate\Products\MvBoxPlayer /f /v IsInstalled /t REG_DWORD /d 0 >NUL 2>NUL
reg add HKCR\NETOK\shell\open\command /f /ve /d "\"%~dp0MvBoxPlayer.exe\" \"%%1\"" >NUL 2>NUL
reg add HKCR\MVBOXRS\shell\open\command /f /ve /d "\"%~dp0MvBoxPlayer.exe\" \"%%1\"" >NUL 2>NUL
reg add HKLM\SOFTWARE\Classes\NETOK\shell\open\command /f /ve /d "\"%~dp0MvBoxPlayer.exe\" \"%%1\"" >NUL 2>NUL
reg add HKLM\SOFTWARE\Classes\MVBOXRS\shell\open\command /f /ve /d "\"%~dp0MvBoxPlayer.exe\" \"%%1\"" >NUL 2>NUL
reg add HKLM\SOFTWARE\Classes\SOFTWARE\RealNetworks\Preferences\DT_Codecs /f /ve /d "%~dp0Filters\RealCodecs" >NUL 2>NUL
ECHO.&ECHO.绿化完成! 是否创建桌面快捷方式?
ECHO.&ECHO.是按任意键继续,否直接关闭窗口!&PAUSE >NUL 2>NUL
mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\MVBOX.lnk""):b.TargetPath=""%~dp0MvBoxPlayer.exe"":b.WorkingDirectory=""%~dp0"":b.Save:close")
CLS&ECHO.&ECHO.完成! &PAUSE >NUL 2>NUL&EXIT
可以发现,这个批注里文件如果被运行,也是会将一些必要的组件进行注册,然后添加一些必要的注册表信息。
但如果对比原版安装包,可以发现,通常情况下免安装版所注册的信息比原版少的多,只有必要的信息才会被添加到系统。
这也是我在上一节课中所说,优先使用免安装版软件的一个原因。但注意,如果制作者经验不足,可能导致免安装版稳定性低于原版。
推荐的一个排除法是,如果使用各类修改版发现无法运行,则下载原版软件安装并运行。如果安装版运行正常,则在此时检查修改版是否恢复正常工作了(缺少某些数据被原版安装包补足了),如果不正常,则可以联系原软件的开发者。
还是有点儿东西没写完,因此之后还会有一课,漫谈软件卸载,近期会更(可能)。