Как удалить ключи реестра в Inno Setup при удалении? - PullRequest
0 голосов
/ 19 марта 2020

Я добавляю ключи реестра из файла .reg следующим образом:

[Files]
Source: "{#SourceProject}\REG\CliReg.reg"; DestDir: "{app}"; Components: execfiles

Затем я запускаю файл .reg:

procedure CurStepChanged(CurStep: TSetupStep);
var
  Code: Integer;
begin
  if CurStep = ssPostInstall  then
    begin
      Exec('C:\Windows\SysWOW64\reg.exe', 'import ' + ExpandConstant('{app}') + '\CliReg.reg', '', SW_HIDE, ewWaitUntilTerminated, Code);
      DeleteFile(ExpandConstant('{app}') + '\CliReg.reg');
    end;
end;

Мне нужно удалить все ключи, когда я удалить программу. Я сделал копию моего файла .reg, изменил его, добавив знак «-» перед всеми ключами, а затем запустил следующее:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Code: Integer;
begin
  if CurUninstallStep = usPostUninstall then
    begin
      Exec('C:\Windows\SysWOW64\reg.exe', 'import {#SourceProject}\REG\UnCliReg.reg', '', SW_HIDE, ewWaitUntilTerminated, Code);  
    end; 
end; 

Результата на самом деле не было, чего я ожидал. Две пустые папки верхнего уровня не были удалены. Есть ли другой способ сделать это, чтобы мне даже не понадобилась копия моего файла .reg?

Вот мой файл .reg для удаления ключей:

REGEDIT4

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client]
"AutoConnect"=dword:00000001
"BitmapFileName"="graphres\\Parchmtd.bmp"
"TitleBitmapFileName"="graphres\\Parchmtl.bmp"
"UseBackBitmap"=dword:00000001
"LastConnectConfigID"="trial"
"LastConnectDBID"="default"
"LastConnectTo"=""
"IfOneThenConnect"=dword:00000001
"ShowCaptionsInSysMenu"=dword:00000001
"UseIEToShowInfo"=dword:00000000
"SourceColor"=dword:00000000
"TargetColor"=dword:00000000
"TitleSourceColor"=dword:00000000
"TitleTargetColor"=dword:00000000
"UseGradient"=dword:00000000
"UseTitleGradient"=dword:00000000
"OLHotKeys"=dword:00008041
"AutoShowLOBar"=dword:00000000
"UseScrollLOBar"=dword:00000000
"ModeFontColor"=dword:00000000
"ModeShadowColor"=dword:00ffffff
"MsgServOnTop"=dword:00000001
"EEC"=dword:00000000
"EDE"=dword:00000001
"ActiveX"=dword:00000000
"SkipDsgnHandleTicks"=dword:0000003c
"StopCompileIfError"=dword:00000001
"ShowLogMode"=dword:00000000
"AnimsteQuery"=dword:00000000
"OnAutoFilter"=dword:00000000
"EdDTS"="1.1.0"
"EdDTE"="1.1.0"
"DataPeriod"=dword:ffffffff
"DoPlayIncMessage"=dword:00000001
"PlayOnSpeaker"=dword:00000001
"WavFilePath"=""
"SpeakerFreq"=dword:000001f4
"Autologin"=dword:00000000
"AutologinPwd"=hex:00,00

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer]
"GridSizeX"=dword:00000004
"GridSizeY"=dword:00000004
"DesignerUseGrid"=dword:00000001
"CompileBeforeSave"=dword:00000001
"CompileHidden"=dword:00000001
"ToolsDockW"=dword:000003a8
"ToolsDockH"=dword:00000038
"ToolsNoDockW"=dword:00000268
"ToolsNoDockH"=dword:00000050
"ToolsDockSite"="TDockPanel"
"ToolsLeft"=dword:0000000c
"ToolsTop"=dword:00000000
"ToolsHided"=dword:00000001
"InspectDockW"=dword:000000b4
"InspectDockH"=dword:00000249
"InspectNoDockW"=dword:000000bc
"InspectNoDockH"=dword:00000261
"InspectDockSite"="LDockPanel"
"InspectLeft"=dword:00000000
"InspectTop"=dword:0000000c
"InspectHided"=dword:00000001
"MessagesDockW"=dword:000003a8
"MessagesHided"=dword:00000000
"MessagesDockH"=dword:0000002b
"MessagesNoDockW"=dword:000003b0
"MessagesNoDockH"=dword:00000043
"MessagesDockSite"="BDockPanel"
"MessagesLeft"=dword:0000000c
"MessagesTop"=dword:0000000c
"ShowAsmText"=dword:00000000

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{22C87BED-0968-11D4-895A-00A0C9DC0CC3}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{22C87C04-0968-11D4-895A-00A0C9DC0CC3}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{335F04EF-6DF4-11D4-895C-0090272D5A2F}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{5C6E8F61-9DB4-11D3-9B43-0090272D5A2F}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{75FD9C66-75BD-11D3-9B43-0090272D5A2F}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{89DCC525-6172-11D4-895C-0090272D5A2F}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{89DCC52B-6172-11D4-895C-0090272D5A2F}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{8D3B7C03-C9A0-11D3-B378-0090278D41A1}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{9169B47B-C8D2-11D3-B377-0090278D41A1}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{E6038DDD-A12B-463B-8D6A-5D8F4A6B2828}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\Components\{E7DB0A0D-9160-4E86-8D80-23F1C5BBDDBA}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\OptionsClasses]
"OptionClass1"="{ACF85B87-9384-11D3-9B43-0090272D5A2F}"

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\TextEditor]
"ShowUnitFullName"=dword:00000000
"EasyCoderHeight"=dword:000000fa
"EasyCoderWidth"=dword:000000fa

[-HKEY_LOCAL_MACHINE\SOFTWARE\ABSystem\Office4\Client\Designer\TextEditor\DisplayOptions]
"FontName"="Courier New"
"FontSize"=dword:0000000a
"LinesInterval"=dword:00000000
"VisibleGutter"=dword:00000001
"GutterWidth"=dword:00000019
"VisibleRightMargin"=dword:00000001
"RightMargin"=dword:00000050
"BriefCursorShapes"=dword:00000000
"HintReshowDelay"=dword:00000175   

[-HKEY_LOCAL_MACHINE\Software\ABSystem\Office4\Client\Designer\TextEditor\FindReplace]
"FindOptions"=dword:00000000
"FindOrigin"=dword:00000000
"FindStrings"=""
"ReplaceStrings"=""      

[-HKEY_LOCAL_MACHINE\Software\ABSystem\Office4\Client\Designer\TextEditor\EditorOptions]
"AutoIndentMode"=dword:00000001
"BackspaceUnindents"=dword:00000001
"DoubleClickLine"=dword:00000000
"FindTextAtCursor"=dword:00000001
"GroupUndo"=dword:00000001
"KeepTrailingBlanks"=dword:00000000
"OverwriteBlocks"=dword:00000001
"PersistentBlocks"=dword:00000000
"SmartTab"=dword:00000001
"TabStop"=dword:00000008
"UndoAfterSave"=dword:00000001
"UseSyntaxHighlight"=dword:00000001

Вот результат: enter image description here Я хочу удалить все, что было установлено, хотя. Раздел [Registry] не совсем то, что мне нужно, потому что у меня есть файлы .reg для чтения, и это более удобно для меня.

1 Ответ

1 голос
/ 24 марта 2020

Напишите свою собственную функцию в разделе [Code]. Прочитайте ваш * .reg-файл (с LoadStringsFromFile) и проанализируйте строки для созданных ключей.

Вызовите эту функцию в CurUninstallStepChanged с помощью if ( CurUninstallStep = usPostUninstall ).

В функции вы можете использовать RegKeyExists, чтобы проверить, удалена ли клавиша или нет. Если нет, то удалите его с помощью RegDeleteKeyIncludingSubkeys или RegDeleteKeyIfEmpty.

...