繁体   English   中英

如何强制InnoSetup创建卸载日志文件

[英]How to force InnoSetup to create an uninstall log file

我正在使用InnoSetup来创建我的应用程序安装程序,并设置“SetupLogging = yes”标志以始终在%TEMP%目录中创建一个setup-log文件。 这适用于安装过程。 不幸的是,InnoSetup在卸载应用程序时不会创建这样的日志文件。

是否有标志/可能强制InnoSetup也创建卸载日志文件?

我已经能够让安装程序通过在“图标”部分中将“/ log”选项作为参数添加到其exe中来编写日志文件:

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

[Icons]
...
Name: {group}\Uninstall; Filename: {uninstallexe}; Parameters: "/log";

我编写了以下代码来实现@ 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;

我不是专家,但在我的情况下,我注意到在安装过程中,在安装目录中还创建了一个具有以下名称的文件:

 unins000.exe

因此,要创建用于卸载的日志文件,我只需要从命令行调用该文件,给出日志的路径\\名称,在我的例子中是disinstallazione.log:

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

这就是我如何理解卸载过程中发生的事情。


PS也在我的情况下我有

SetupLogging=yes

不,您必须使用[Code]更新Uninstall注册表项,以在UninstallString值中包含/ LOG参数。

注册表项将是HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall(YourAppID)_is1或HKEY_CURRENT_USER \\ SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall(YourAppID)_is1

在安装结束时执行此操作,并且仅在成功时执行此操作。 例如,在CurStepChanged事件函数中使用CurStep = ssPostInstall。

将这两行放在InnoSetup脚本的[Setup]部分中

[Setup]
SetupLogging=yes
UninstallLogMode=append

卸载后,查看日志的临时文件夹。 在Windows7中,该位置将是

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

你会发现一个名为的文件

Setup Log 2014-12-10 #001.txt

那是你的Inno Setup Log文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM