2017-01-16 30 views
2

이 도구를 처음 사용하는 Inno Setup으로 설치 프로그램을 만들고 싶습니다.
내가하려고하는 것은 기존 소프트웨어의 기존 설치 관리자를보다 자세한 자체 제작 설치 관리자 (Setup.exe 내의 Setup.exe를 의미)로 묶는 것입니다.Inno Setup에서 설치가 끝날 때 32/64-bit 특정 레지스트리 키 쓰기

지금까지 조사한 후에 나에게 맞는 것은 설치 프로그램 (Inno Setup * .exe)에 포함 된 설치 프로그램 (실제 소프트웨어 설정)을 실행하라고 요청하는 것입니다.
왜 다른 설치 프로그램이 필요합니까? 왜냐하면 나는 그것에게 약간의 여분의 기능을주고 싶기 때문이다.

특정 사항 : 설치 마지막 단계에서 관련 비트 시스템 (32 비트/64 비트)에 맞는 레지스트리 키를 추가하고 싶습니다. 그리고 여기 제가 전문가의 도움을 구하는 곳입니다. 다음과 같이 (주요 관심사) 상세

내 문제는 다음과 같습니다

  1. 나는 이노 설정의 [Registry] 섹션을 사용하여 키를 추가 할 수 있었다. 그러나 [Registry]은 항상 [Run] 전에 실행되는 것처럼 보입니다. 그러나 설치 전 (설치 자체가 생성하는 regedit-path에 추가됨)이 아닌 키가 필요하기 때문에 이전에 작동하지 않은 항목을 삭제했습니다 ([Registry]). . 주 설치 후 reg-add를 수행하기 위해 두 절차 (AfterInstallCurStepChanged/ssPostInstallDeinitializeSetup)가 내 관심사에 맞게 잘 맞지 않는 것으로 나타났습니다. (생각해 보면 AfterInstall이 (?)) 설치가 이미 실패한 경우 (?!)
  2. 레지스트리 키 (문자열)를 추가하기위한 파스칼 구문을 알지 못합니다. 기존 경로 아래에 추가 할 수 있습니다. 섹션에 관해서는 [Registry] 아래에 추가 할 수 있습니다. 이노 설치 기능과 관련하여 많은 연구를 했더라도 조금 잃어버린 느낌이 들었습니다.
  3. 세 번째 문제는 레지스트리의 경로는 32 또는 64인지 여부에 따라 다릅니다. -bit 시스템. 그래서 실제로 비트 - 시스템 중 하나 또는 다른 경로/키를 추가하기 전에 (이미 비트 버전에 따라 프로그램 자체의 설치 경로를 생성하기 때문에) 추가 검사를해야하는데, 나는이 함수를 찾았습니다. IsWin64 (부울) , 지금은 함수 (bit-version-query)와 프로 시저 (AfterInstall)를 섞으려고 시도하는 것은 나에게 초보자로 잘못 들린다. 게다가 if-else-query를 만들려고했는데 컴파일러가 잘못하고 있다고 말했다. if IsWin64 then...이 작동하지만 else를 추가해도 그렇지 않습니다.

그래서 이론에서 솔루션 대략 더를 제공 할 필요가 없습니다에 대한

procedure MyAfterInstall(); 
    function IsWin64: Boolean; 
     if 64-bit Reg-Add HKLM\SOFTWARE\Wow6432Node\A 
     else Reg-Add HKLM\SOFTWARE\B 

죄송합니다 ... 뭔가 같은 것입니다. 나는 보통 코딩하지 않는다. 그러나 나는이 함수는 것을 알고, 내가 DeinitializeSetup이 지금까지 나를 위해 일 한 가지이기 때문이었다 사용하는 이유

[Code] 
procedure DeinitializeSetup(); 
begin 
    RegWriteStringValue(
    HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\A', 'ConnectionString ', 'Data Source=Test;'); 
end; 

이유 :

관련된 경우에, 그것은 내가 지금까지 내 코드 섹션에있는 무엇 아무 것도 설치되기 전에 사용자가 설치 프로그램을 종료하더라도 호출됩니다. 이는 그리 좋지 않습니다.소프트웨어 설치 자체가 키를 추가 할 경로를 생성하기 때문에 설치 후이 작업을 실행합니다. 소프트웨어 설치가 실패하는 동안 키를 갖고 있지 않은 것은 ... 어쩌면 거기에 더 좋은 방법이있을 수도 있습니다.
많은 단어에 사과와 도움을 미리 감사드립니다.

+0

가'대 등록-추가 오히려 HKLM \ SOFTWARE \ B' 또는'정말'HKLM \ SOFTWARE \ Wow6432Node \ A'를인가 Reg-Add HKLM \ SOFTWARE \ A'? 나는. 'Wow6432Node'의 유일한 차이점입니까 아니면 다른 실제 키 경로 끝입니까? –

+0

@MartinPrikryl 당신이 맞습니다, 경로에 "Wow6432Node"가 유일한 차이점입니다. 나머지는 동일합니다. 추가하고자하는 데이터 레코드가 32 비트 및 64 비트 버전 모두 동일합니다. – Yauhun

답변

2

설치가 완료된 후 코드를 실행하려면 CurStepChanged event function을 사용하고 CurStep = ssPostInstall을 확인하십시오.

Inno 설치는 32 비트 응용 프로그램이므로 기본값은 자동으로 gets redirected to the Wow6432Node on 64-bit systems입니다. 명시 적으로 할 필요가 없습니다. 당신이 64-bit installation mode을 사용하지 않는 한, 물론

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then 
    begin 
    Log('Installation finished, writing connection string'); 
    RegWriteStringValue(
     HKEY_LOCAL_MACHINE, 'SOFTWARE\A', 'ConnectionString', 'Data Source=Test;'); 
    end; 
end; 

다음 Wow6432Node는 32 비트 및 64 비트 경로 사이의 유일한 차이가 있다면, 당신은 특별한 일을 할 수가 없습니다.

다음을 참조하십시오 : Writing 32/64-bit specific registry key in Inno Setup.


키 경로가 정말 다른 경우

는 사용 IsWin64 function :

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then 
    begin 
    if IsWin64 then 
    begin 
     Log('Installation finished, writing 64-bit connection string'); 
     RegWriteStringValue(
     HKEY_LOCAL_MACHINE, 'SOFTWARE\A', 'ConnectionString', 'Data Source=Test;'); 
    end 
     else 
    begin 
     Log('Installation finished, writing 32-bit connection string'); 
     RegWriteStringValue(
     HKEY_LOCAL_MACHINE, 'SOFTWARE\B', 'ConnectionString', 'Data Source=Test;'); 
    end; 
    end; 
end; 
+0

오 세상에, 마침내 효과가있었습니다. 얼마나 많은 시간을 보냈는지 믿을 수 없어 ... 고마워. (위의 편집/수정에 대해 감사드립니다. 너무 많이 말합니다.) 레지스트리 경로 및 데이터 레코드를 만들 때 주 설치가 수행하기 때문에 두 비트 버전간에 차이가 있습니다. 그걸로 한 번 더. 어쩌면 나는 여기에 기본적인 이해가 부족했을 것이다. – Yauhun