2010-03-25 9 views
3

InnoSetup을 사용하여 응용 프로그램 설치 프로그램을 만들고 "SetupLogging = yes"플래그를 설정하여 항상 % TEMP % 디렉토리에 설치 로그 파일을 만듭니다. 이것은 설치 절차에 잘 작동합니다. 안타깝게도 InnoSetup은 애플리케이션을 제거 할 때 그러한 로그 파일을 생성하지 않습니다.InnoSetup이 제거 로그 파일을 생성하도록하는 방법

InnoSetup에 강제로 제거 로그 파일을 만들 수있는 플래그/가능성이 있습니까?

답변

2

아니요, [제거] 레지스트리 키를 업데이트하여 UninstallString 값에/LOG 매개 변수를 포함시켜야합니다.

레지스트리 키를

마지막에이 작업을 수행 _is1 마이크로 소프트 \ 윈도우 \ CurrentVersion을 \ 제거 (YourAppID) \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ 제거 (YourAppID) _is1 또는 HKEY_CURRENT_USER \ 소프트웨어 \ HKEY_LOCAL_MACHINE \ 소프트웨어가 될 것입니다 설치가 완료된 경우에만 예를 들어, CurStep = ssPostInstall이있는 CurStepChanged 이벤트 함수 내부.

+0

답변 해 주셔서 감사합니다. 이 솔루션은 나를 위해 잘 작동합니다. 그러나 (...) 그것은 더러운 해킹의 느낌을 가지고 있습니다. 이 기능이 향후 설정 플래그로 추가 될지 여부는 어떤 생각입니까? – mkva

+0

죄송 합니다만 http : //innosetup.uservoice를 사용할 수 있습니다.co.kr/ – mlaan

+0

이 제안에 감사드립니다. 아마도 QuietUninstallString 값도 업데이트하려고 할 것입니다. 별도의 답변으로 샘플 코드를 제공했습니다. –

5

I는 설치 프로그램이 아이콘 섹션의 EXE에 대한 매개 변수로 "/ 로그인"옵션을 추가하여 로그 파일을 작성해야 할 수있었습니다 : 나는 전문가 만에 아닙니다

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

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

그게 작동하지만, 사용자가 제거 프로그램 목록에서 시작 메뉴 아이콘에서보다는 제거해야합니다. –

2

unins000.exe 

그래서, 설치 제거에 대한 로그 파일을 생성, 난 그냥주는 명령 행에서 파일을 호출해야하는 경우 필자는 설치시, 설치 디렉토리에 또한 다음과 같은 이름의 파일이 생성 된 것으로 나타났습니다 내 경우에는 로그의 경로 \ 이름, disinstallazione.log :

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

이것이 제거 과정에서 일어난 일을 이해하는 방법입니다.


P. 또한, 내 경우에는 내가

SetupLogging=yes 
+0

이것은 Inno Setup 컴파일러 5.5.7을 사용하여 저에게 효과적이었습니다. 감사합니다. – Spike0xff

-3

이 로그에 대한 임시 폴더에 보면, 당신의 InnoSetup 스크립트 제거 후

[Setup] 
SetupLogging=yes 
UninstallLogMode=append 

의 [설정] 섹션에 다음 두 줄을 넣어 있습니다. Windows7의에서 그 위치는

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

당신은 당신의 이노 설치 로그 파일입니다

Setup Log 2014-12-10 #001.txt

같은 파일을 이름이 뭔가를 찾을 수있을 것이다.

+6

두 가지를 혼합합니다. 'UninstallLogMode' 지시어는 제거 과정에서 일어난 동작에 대한 로깅과 아무 관련이 없지만'unins * .dat' 제거 로그 파일 (응용 프로그램을 제거하는 방법을 설명하는 파일입니다)과 관련이 있습니다. 그것을 제외하고,'append' 값은 디폴트 값이므로 명시 적으로 지정할 필요가 없습니다. 따라서 설치 로그 파일을 확인하는 동안 (아마도) 설치 로그 파일이 필요합니다. – TLama

4

@ 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; 
관련 문제