2016-11-20 2 views
2

그래서 기본적으로 내 {tmp} 디렉토리에 .zip 파일이 있고 그 내용을 {tmp}에 압축을 풀고 싶습니다. 그러나 내 세 번째 형식은 그 작업으로 끝났을 때만 가능합니다. 그 이유는 세 번째 양식에서이 .zip을 인터넷에서 다운로드하기 때문에 {tmp}에 저장되기 때문입니다. 이제이 파일을 압축 해제 폴더에서 파일을 가져 오는 {tmp}으로 압축을 풀고 설치 프로그램의 나머지 양식에서 사용할 라이센스 계약 파일과 같은 파일을 추출합니다. 의미는 이미 세 번째 파일 이후의 형식에서 추출한 파일을 사용하고 있습니다.특정 페이지가 완료된 후에 Inno Setup에서 .zip 파일을 추출하는 방법이 있습니까?

특정 양식 다음에이를 수행하는 방법을 찾을 수 없습니다. 나는 단지 실행 섹션에서 어떻게 추출이 완료되었는지를 발견했다.

+0

당신이 가진 것을 보여주십시오. 게시물을 편집하고 Inno Setup 스크립트의 관련 부분을 추가하고 사용하는 플러그인을 알려주십시오. –

+0

월요일에 그렇게해야 할 것입니다. 왜냐하면 그 전에 저와 PC를 가지고 있지 않기 때문입니다. 추출을위한 플러그인이 없으며 인터넷을 통해 다운로드 할 수 있습니다. –

답변

2

편집 : 이전 버전에서는 일부 Windows 버전에서는 잘 작동하지 않는 것으로 나타났습니다. 파일을 자동으로 덮어 쓰지 않고 대화 상자 창을 표시 할 수 있습니다. Google에 쉽습니다. CopyHere ignores options.

새로운 방법 :

새로운 방법은 7zip standalone console version를 사용합니다. 그것은 하나의 7za.exe이므로 DLL이 필요하지 않습니다.

#include <idp.iss> 

; Languages section 
; Includes for Mitrich plugin's additional languages 
; #include <idplang\Russian.iss> 

[Files] 
Source: "7za.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall; 

[Run] 
Filename: {tmp}\7za.exe; Parameters: "x ""{tmp}\example.zip"" -o""{app}\"" * -r -aoa"; Flags: runhidden runascurrentuser; 

[Code] 
procedure InitializeWizard; 
begin 
    idpAddFile('https://example.comt/example.zip', ExpandConstant('{tmp}\example.zip')); 
    { Download after "Ready" wizard page } 
    idpDownloadAfter(wpReady); 
end; 

설치가를 시작하기 전에, 압축 해제를 다운로드 (라이센스 계약으로, 예를 들어) 파일을 사용하려면, 난 단지 일반적인 지침 제공 할 수 있습니다 :

  1. 는 환영 페이지 사용을 [Setup] : DisableWelcomePage=no.
  2. idpDownloadAfter(wpWelcome);을 사용하십시오. 이제 "Welcome"페이지 바로 다음에 다운로드됩니다.
  3. 라이선스 페이지가 나타나려면 [Setup] : LicenseFile=license.txt에 빈 라이센스 파일이 필요합니다. 또는 비어 있지는 않지만 "라이센스 계약로드 중 ..."텍스트를 사용하십시오.
  4. procedure CurPageChanged()을 구현합니다. 현재 페이지가 wpLicense 인 경우 Exec() 함수를 호출하여 7zip을 시작하고 종료 될 때까지 기다리는 기능을 호출합니다. 지금은 [Run] 섹션에 7zip이 없습니다. 그렇다면 LoadStringFromFile() 함수를 사용하여 압축을 푼 파일에서 사용권 계약을 얻습니다. 그런 다음 UI에 입력하십시오. 아마도 WizardForm.LicenseMemo.RTFText = ...이 작동 할 것입니다. 어쨌든 UI에 액세스 할 수 있습니다. 텍스트를 설정하는 데 문제가 있으면 여기에서 별도의 질문을하십시오.

된 버그 방법 :

등가, 청소기 방법 unzipper.dll하지 않고는 described here입니다.편도 또는 다른, 그것은 버그를 사용 CopyHere Windows 기능.

#include <idp.iss> 

; Languages section 
; Includes for Mitrich plugin's additional languages 
; #include <idplang\Russian.iss> 

[Files] 
Source: "unzipper.dll"; Flags: dontcopy 

[Code] 
procedure InitializeWizard; 
begin 
    idpAddFile('https://example.comt/example.zip', ExpandConstant('{tmp}\example.zip')); 
    { Download after "Ready" wizard page } 
    idpDownloadAfter(wpReady); 
end; 

procedure unzip(src, target: AnsiString); 
external '[email protected]:unzipper.dll stdcall delayload'; 

procedure ExtractMe(src, target : AnsiString); 
begin 
    unzip(ExpandConstant(src), ExpandConstant(target)); 
end; 

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then 
    begin 
    { Extract when "Finishing installation" setup step is being performed. } 
    { Extraction crashes if the output dir does not exist. } 
    { If so, create it first: } 
    { CreateDir(ExpandConstant(...)); } 
    ExtractMe('{tmp}\example.zip', '{app}\'); 
    end; 
end; 

당신은 아마 대신 wpReadyssPostInstall의 다른 것들을 시도 할 수 있습니다. 내 작은 우편 들어,이 잘 작동합니다.

+0

'unzipper.dll '을 사용하는 것은 과잉이라고주의하십시오. 원시 파스칼 스크립트 코드를 사용하여 같은 것을 구현할 수 있습니다. [Inno Setup에서 설치 한 파일의 압축을 풀는 방법 (모두 하나의 설치 프로세스의 일부로)] (http://stackoverflow.com/a/40706549/850848)을 참조하십시오. –

+0

@MartinPrikryl 좋습니다. 고마워요. 나는 그것이 잘 작동하는지 체크 아웃하고 나의 대답을 편집 할 것이다. –

+1

@MartinPrikryl 'CopyHere'는 일부 Windows 버전에서 옵션을 무시할 수 있음을 알았습니다. 나는 나의 대답을 업데이트했다. 이제 나는 7zip을 사용한다. –