Как заставить InnoSetup создать файл журнала удаления - PullRequest
4 голосов
/ 25 марта 2010

Я использую InnoSetup для создания установщиков приложений и устанавливаю флаг «SetupLogging = yes», чтобы всегда создавать файл журнала установки в каталоге% TEMP%. Это прекрасно работает для процедуры установки. К сожалению, InnoSetup не будет создавать такой файл журнала при удалении приложения.

Есть ли флаг / возможность заставить InnoSetup также создавать файл журнала удаления?

Ответы [ 5 ]

5 голосов
/ 23 июля 2012

Мне удалось, чтобы установщик записал файл журнала, добавив параметр «/ log» в качестве параметра к его exe-файлу в разделе «Значки»:

[Setup]
...
SetupLogging=yes
...

[Icons]
...
Name: {group}\Uninstall; Filename: {uninstallexe}; Parameters: "/log";
4 голосов
/ 31 декабря 2015

Я написал следующий код для реализации ответа @ mlaan (добавив "/ log" к строкам удаления в реестре). Обратите внимание, что я проверяю только HKLM. Вы можете добавить строки для проверки HKCU вместо этого или также.

#define MyAppID "{3D97CC33-75B0-4D86-8533-B213E5FF4046}"

[Setup]
AppId={{#MyAppID}

[Code]
procedure AppendStringToRegValue(const RootKey: integer; const SubKeyName, ValueName, StringToAppend: string);
var
  OldValue: string;  
  NewValue: string;  
  RootKeyString: string;
begin
  case RootKey of
    HKLM: 
      RootKeyString := 'HKLM';
    HKCU: 
      RootKeyString := 'HKCU';
  else 
    RootKeyString := 'RootKey ' + IntToStr(RootKey);
  end;

  if RegQueryStringValue( RootKey, SubKeyName, ValueName, OldValue ) then
  begin
    NewValue := OldValue + StringToAppend
    if RegWriteStringValue( RootKey, SubKeyName, ValueName, NewValue ) then
      Log('Updated ' + RootKeyString + '\' + SubKeyName + '\' + ValueName + '. New Value = [' + NewValue + '].')
    else
      Log('Could not write to ' + RootKeyString + '\' + SubKeyName + '\' + ValueName + '. Value remains [' + OldValue + '].' )
  end
  else
    Log('Could not read from ' + RootKeyString + '\' + SubKeyName + '\' + ValueName + '.' );
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  OldValue: string;  
  NewValue: string;  
  UninstallSubKeyName:  string;
begin
  if CurStep = ssPostInstall then
  begin
    { Modify uninstall registry entries to add "/log" parameter for uninstall }
    UninstallSubKeyName  := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppID}_is1'
    AppendStringToRegValue(HKLM, UninstallSubKeyName, 'UninstallString', ' /log')
    AppendStringToRegValue(HKLM, UninstallSubKeyName, 'QuietUninstallString', ' /log')
  end;
end;
2 голосов
/ 12 июня 2014

Я не эксперт, но в моем случае я заметил, что во время установки в каталоге установки также был создан файл со следующим именем:

 unins000.exe

Итак, чтобы создать файл журнала для удаления, мне просто нужно вызвать файл из командной строки, указав путь \ имя журнала, в моем случае disinstallazione.log:

unins000.exe  /log="C:\disinstallazione.log"

Вот так я могу понять, что происходит во время удаления.


P.S. также в моем случае у меня есть

SetupLogging=yes
2 голосов
/ 25 марта 2010

Нет, вам потребуется использовать [Код], чтобы обновить раздел реестра Uninstall, чтобы включить параметр / LOG в значение UninstallString.

Разделом реестра будет либо HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall (YourAppID) _is1, либо HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall (YourAppID) _is1

Сделайте это в конце установки и только тогда, когда она прошла успешно. Например, внутри функции события CurStepChanged с CurStep = ssPostInstall.

0 голосов
/ 11 декабря 2014

Поместите эти две строки в раздел [Setup] вашего скрипта InnoSetup

[Setup]
SetupLogging=yes
UninstallLogMode=append

После удаления поищите во временной папке свои журналы. В Windows7 это местоположение будет

C:\Users\<UserName>\AppData\Local\Temp

Вы найдете файл с именем, похожим на

Setup Log 2014-12-10 #001.txt

Это ваш файл журнала Inno Setup.

...