2016-09-22 15 views
1

NSISを使用して実行可能ファイルを生成します。NSISで実行可能ファイルではなくzipアーカイブを生成

現在、これらのパッケージ製品のコンテンツは、インストーラを生成する開発者がカスタマイズできます。このために、コンポーネントごとに1つずつ、および実行可能ファイルを作成するためにコンポーネントを使用するいくつかの.nsiスクリプトを作成しました。

最近、シンプルな.zipファイルと.exeパッケージャを提供するように求められました。コードの重複を避け、生成された.zipと.exeインストーラが同じコンテンツを共有していることを確認するため、同じ.nshスクリプトコンポーネントを使用して、実行可能ファイルの代わりに.zipアーカイブを作成します。

NSISで生成された.exeを7zipで開くことができ、基本的にはアーカイブだと思っていましたが、どうやって見つけることができませんでした。

あなたはそれが可能かどうか知っていますか?

答えて

0

7-zipはNSIS形式をリバースエンジニアリングしていますが、NSISはスクリプトベースであるため、結果は完全ではありません。私はあなたがあなたのインストーラの特別な抽出モードを与えることをお勧めします

Setup.nsi

Name "Test" 
OutFile "Test.exe" 
RequestExecutionLevel user 
InstallDir "c:\some\path\Test" 

Page Components 
Page Directory 
Page InstFiles 

Section "Required program files" INSTSEC_MAIN 
SectionIn RO 
SetOutPath $InstDir 
File "/oname=$InstDir\MyApp.exe" "${__FILE__}" 
SectionEnd 

Section "Documentation" 
SetOutPath $InstDir\Docs 
File "/oname=$InstDir\Docs\Foo.txt" "${__FILE__}" 
File "/oname=$InstDir\Docs\Bar.txt" "${__FILE__}" 
SectionEnd 

Section -Uninstaller INSTSEC_UNINST 
WriteUninstaller "$InstDir\Uninst.exe" 
#WriteRegStr ... 
SectionEnd 

Section -un.Uninstaller 
Delete "$InstDir\Docs\Foo.txt" 
Delete "$InstDir\Docs\Bar.txt" 
RMDir "$InstDir\Docs" 
Delete "$InstDir\MyApp.exe" 
Delete "$InstDir\Uninst.exe" 
RMDir "$InstDir" 
#DeleteRegKey ... 
SectionEnd 

!include LogicLib.nsh 
!include FileFunc.nsh 
!include Sections.nsh 
Function .onInit 
${GetParameters} $0 
ClearErrors 
${GetOptions} "$0 " "/X" $1 
${IfNot} ${Errors} 
    SetSilent silent 
    !insertmacro UnselectSection ${INSTSEC_UNINST} ; Don't include uninstaller in .zip file 
${EndIf} 
FunctionEnd 

MakeZip.cmd

@echo off 
setlocal 
set OUTPUT=%~dp0test.zip 
set INSTALLER=%~dp0test.exe 
set SEVENZIP=7z.exe 
set TMPROOT=%temp%\tmpinst%RANDOM%%RANDOM% 

call "%INSTALLER%" /X /D=%TMPROOT% && (
    call "%SEVENZIP%" a "%OUTPUT%" -tzip -mx9 -r "%TMPROOT%\*" 
    rmdir /S /Q "%TMPROOT%" 
) 

注:あなたがしている場合あなたの.nsiでRequestExecutionLevel adminを使用すると、バッチファイルelevを実行する必要がありますated。

関連する問題