我正在使用InnoSetup创建我的应用程序安装程序,并将“SetupLogging = yes”标志设置为始终在%TEMP%目录中创建安装日志文件。这适用于安装过程。不幸的是,当我卸载应用程序时,InnoSetup不会创建这样的日志文件。如何强制InnoSetup创建卸载日志文件
是否有强制InnoSetup创建卸载日志文件的标志/可能性?
我正在使用InnoSetup创建我的应用程序安装程序,并将“SetupLogging = yes”标志设置为始终在%TEMP%目录中创建安装日志文件。这适用于安装过程。不幸的是,当我卸载应用程序时,InnoSetup不会创建这样的日志文件。如何强制InnoSetup创建卸载日志文件
是否有强制InnoSetup创建卸载日志文件的标志/可能性?
不,您将不得不使用[代码]更新卸载注册表项以在UninstallString值中包含/ LOG参数。
注册表项将是要么HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载(YourAppID)_is1或HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载(YourAppID)_is1
末做到这一点在安装时,并且只有在它成功时。例如,在CurStepChanged事件函数中使用CurStep = ssPostInstall。
我已经能够让安装程序通过添加“/日志”选项作为参数传递给它的exe文件图标部分写入日志文件:
[Setup]
...
SetupLogging=yes
...
[Icons]
...
Name: {group}\Uninstall; Filename: {uninstallexe}; Parameters: "/log";
这可行,但要求用户从“开始”菜单图标而不是从“卸载程序”列表中卸载。 – 2015-12-30 20:09:12
我不是专家,但我情况下,我注意到,在安装过程中,安装目录中还创建具有以下名称的文件:
unins000.exe
因此,创建卸载日志文件,我只需要调用命令行给出的文件日志的路径\名称,在我的情况下是disinstallazione.log:
unins000.exe /log="C:\disinstallazione.log"
这就是我如何理解卸载过程中发生了什么。
P.S.也是在我的情况,我有
SetupLogging=yes
这只适用于我,Inno Setup编译器5.5.7。 谢谢! – Spike0xff 2017-06-30 19:43:43
把这两行您的InnoSetup脚本
[Setup]
SetupLogging=yes
UninstallLogMode=append
卸载后的[设置]部分,看在你的日志中的临时文件夹。在Windows7中该位置将是
C:\Users\<UserName>\AppData\Local\Temp
你会发现一个文件中像
Setup Log 2014-12-10 #001.txt
那是你的Inno Setup的日志文件命名为东西。
你在混合两件事。 'UninstallLogMode'指令与记录卸载过程中发生的操作无关,但与'unins * .dat'卸载日志文件(这是包含有关如何卸载应用程序的说明的文件)有关。除此之外,'append'值是默认值,因此不需要明确指定。所以你发现的是(最有可能的)安装日志文件,而问题要求卸载日志。 – TLama 2014-12-11 01:05:03
我写了下面的代码来实现@ 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;
感谢您的回答。这个解决方案适合我。但是(...)它确实具有肮脏的黑客的感觉。任何想法,如果这个功能可能作为设置标志将来添加? – mkva 2010-03-25 16:14:16
没有抱歉,但你可以使用http://innosetup.uservoice。com/ – mlaan 2010-03-25 17:10:34
感谢您的建议。您可能还想更新QuietUninstallString值。我在一个单独的答案中提供了示例代码。 – 2015-12-30 22:44:22