inno setup遍历注册表某个路径如HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下包含指定字符串的key示例如下:
//out表示出参
function CheckIsInstalledFromRegistry(out uninstallKey: String):Boolean;
var
Names: TArrayOfString;
I: Integer;
RootKey: Integer;
Subkey: String;
begin
Result := false;
if IsWin64 then
begin
RootKey := HKLM64;
end
else
begin
RootKey := HKLM32;
end;
if RegGetSubkeyNames(RootKey, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', Names) then
begin
for I := 0 to GetArrayLength(Names)-1 do
begin
Subkey := Names[I];
//检测注册表的Subkey是否包含"helloUninstall"
if Pos('{#MyAppUninstallRegistryKeyName}', Subkey) > 0 then
begin
MyLog('hello is installed! '+ Subkey);
uninstallKey := Subkey;
Result := true;
end
else
MyLog(Subkey);
begin
end;
end;
//MsgBox('List of subkeys:'#13#10#13#10 + S, mbInformation, MB_OK);
end else
begin
MyLog('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall has no subkey!');
// 添加处理失败的代码
end;
end;
完整脚本下载: