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

Installation 如何强制InnoSetup创建卸载日志文件,installation,inno-setup,Installation,Inno Setup,我正在使用InnoSetup创建我的应用程序安装程序,我设置了“SetupLogging=yes”标志,以便始终在%TEMP%目录中创建安装日志文件。这对于安装过程非常有效。不幸的是,InnoSetup在卸载应用程序时不会创建这样的日志文件 是否存在强制InnoSetup也创建卸载日志文件的标志/可能性?否,您必须使用[Code]更新卸载注册表项,以便在卸载字符串值中包含/log参数 注册表项将是HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\

我正在使用InnoSetup创建我的应用程序安装程序,我设置了“SetupLogging=yes”标志,以便始终在%TEMP%目录中创建安装日志文件。这对于安装过程非常有效。不幸的是,InnoSetup在卸载应用程序时不会创建这样的日志文件


是否存在强制InnoSetup也创建卸载日志文件的标志/可能性?

否,您必须使用[Code]更新卸载注册表项,以便在卸载字符串值中包含/log参数

注册表项将是HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall(YourAppID)\u is1或HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall(YourAppID)\u is1


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

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

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

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

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

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

unins000.exe  /log="C:\disinstallazione.log"
这就是我如何理解卸载过程中发生的事情


另外,就我而言,我也有

SetupLogging=yes

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

[Setup]
SetupLogging=yes
UninstallLogMode=append
卸载后,在临时文件夹中查找日志。在Windows7中,该位置将是

C:\Users\\AppData\Local\Temp

您将发现一个名为

设置日志2014-12-10#001.txt


这是您的Inno安装日志文件。

我编写了以下代码来实现@mlaan的答案(将“/Log”附加到注册表中的卸载字符串)。请注意,我只检查HKLM。您可以添加行以检查HKCU,也可以添加行

#定义MyAppID“{3D97CC33-75B0-4D86-8533-B213E5FF4046}”
[设置]
AppId={{#MyAppID}
[守则]
过程AppendStringToRegValue(constRootKey:integer;constSubKeyName,ValueName,StringToAppend:string);
变量
OldValue:字符串;
NewValue:string;
RootKeyString:string;
开始
案例根键
香港电影学院:
RootKeyString:=“HKLM”;
香港大学:
RootKeyString:=“HKCU”;
其他的
RootKeyString:='RootKey'+IntToStr(RootKey);
结束;
如果是RegQueryStringValue(RootKey、SubKeyName、ValueName、OldValue),则
开始
NewValue:=OldValue+StringToAppend
如果是RegWriteStringValue(RootKey、SubKeyName、ValueName、NewValue),则
日志('Updated'+RootKeyString+'\'+SubKeyName+'\'+ValueName+'。新值=['+NewValue+'].'))
其他的
日志('无法写入'+RootKeyString+'\'+SubKeyName+'\'+ValueName+'。值仍为['+OldValue+'.]))
结束
其他的
日志('无法读取'+RootKeyString+'\'+'SubKeyName+'\'+'ValueName+');
结束;
过程CurStepChanged(CurStep:TSetupStep);
变量
OldValue:字符串;
NewValue:string;
卸载子关键字名称:字符串;
开始
如果CurStep=ssPostInstall,则
开始
{修改卸载注册表项以添加用于卸载的“/log”参数}
UninstallSubKeyName:=“SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{#MyAppID}\u is1”
AppendStringToRegValue(HKLM,UninstallSubKeyName,'UninstallString','/log')
AppendStringToRegValue(HKLM,UninstallSubKeyName,'quietInstallString','/log')
结束;
结束;

谢谢你的回答。这个解决方案对我来说很好。但是(…)它确实给人一种肮脏的感觉。你知道将来是否可以将此功能添加为安装标志吗?谢谢你的建议。你可能还想更新quietInstallString值。我在一个单独的答案中提供了示例代码。你把两件事混在一起了。
UninstallLogMode
指令没有什么需要修改的o记录卸载过程中发生的操作,但这些操作与
unins*.dat
uninstall日志文件相关(该文件包含如何卸载应用程序的说明)。除此之外,
append
值是默认值,因此不需要显式指定。因此,您发现的是(很可能是)当问题询问卸载日志时,会出现一个安装日志文件。这是可行的,但要求用户从“开始”菜单图标而不是从“卸载程序”列表中卸载。使用Inno setup compiler 5.5.7,这对我很有效。谢谢!