论坛风格切换切换到宽版
  • 1497阅读
  • 3回复

Inno Setup 使用技巧 - 如何删除某个注册表键及其所有子键和父键 [复制链接]

上一主题 下一主题
离线gnatix
 

发帖
7696
金钱
-8279
威望
-828
只看楼主 倒序阅读 0 发表于: 2015-09-06
某些应用程序,比如 Inno Setup 5.5.5,在使用后,会在注册表中留下类似下面这样的内容:
HKEY_CURRENT_USER\C:\Program Files (x86)\Inno Setup 5.5.5
其中 Inno Setup 5.5.5 就是安装程序的目录。
卸载应用程序时,希望不但清理该键下面的子键,同时也清理它上面的各级父键。
用下面的代码不但可以删除该键下面所有的子键,同时也可以删除它上面所有的父键。而且该代码仅删除空白父键,也就是说如果父键中包含其它应用程序创建的内容,那么将不被删除。


[Code]
procedure TotalDeleteRegKey(rKey: integer; sKey: string; deletesubkeys: boolean);
var
  s: string;
begin
  s := sKey;
  if deletesubkeys then
    RegDeleteKeyIncludingSubkeys(rKey, sKey)
  else
    RegDeleteKeyIfEmpty(rKey, sKey);
  if Pos('\', s) <> 0 then
    begin
      while s[Length(s)] <> '\' do
        Delete(s, Length(s), 1);
      Delete(s, Length(s), 1);
      TotalDeleteRegKey(rKey, s, false);
    end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
    TotalDeleteRegKey(HKCU, ExpandConstant('{app}'), true);
end;
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 1 发表于: 2015-09-06
用户被禁言,该主题自动屏蔽!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2015-09-07
如果你不能肯定就直接删除整个键,这种做法是有风险的。有的公司 XXX 在安装 YYY 系列的 ZZZ 软件时候,在注册表中会创建
HKEY_CURRENT_USER\Software\XXX\YYY\ZZZ
你用上面的代码,同样可以删除 ZZZ,YYY 和 XXX 键,而不会有风险。
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 3 发表于: 2015-09-07
用户被禁言,该主题自动屏蔽!