web-dev-qa-db-ja.com

7-Zip自己解凍アーカイブ(SFX)アーカイブからの抽出後にファイルを実行することは可能ですか?

圧縮されたデプロイ可能なアプリケーションを作成しようとしています。

現在、公開した一連のファイルをIDE(Visual Studio 2008-WPF published application))から取得し、7-Zip SFXアーカイブに圧縮しています。

ユーザーは、7-Zip exeから「ワンクリックインストール」できるかどうかを尋ねてきました。アーカイブを作成するときにパラメーターリストがあります。抽出されたインストーラー実行可能ファイルを呼び出すために、ある種のパラメーターの組み合わせを設定する方法はありますか?

残念ながら、7-Zipのドキュメントはこのシナリオをカバーしていないようです。これに似た有料アプリケーションをいくつか見たことがありますが、私が書いているツールをライセンスコードなしにして、内部で使用できるようにしようとしています。

41
Mike G

LMZA SDK from 7-Zip をダウンロードする必要があります。 「installer.txt」ファイルにはドキュメントが含まれています。

7zSD.sfxは、インストーラー用のSFXモジュールです。 7zSD.sfxはmsvcrt.dllを使用します。

インストーラー用のSFXモジュールにより、インストールプログラムを作成できます。このようなモジュールは、一時フォルダーにアーカイブを抽出し、指定されたプログラムを実行し、プログラムの終了後に一時ファイルを削除します。インストーラーの自己解凍アーカイブは、3つのファイル(SFX_Module、Installer_Config、7z_Archive)を結合して作成する必要があります。 Installer_Configはオプションのファイルです。次のコマンドを使用して、インストーラーの自己解凍アーカイブを作成できます。

copy /b 7zSD.sfx + config.txt + archive.7z archive.exe

Config.txtファイルを作成する必要があります。

構成ファイルには、インストーラーのコマンドが含まれています。ファイルは文字列;!@Install@!UTF-8!で始まり、;!@InstallEnd@!で終わります。ファイルはUTF-8エンコーディングで記​​述されている必要があります。ファイルに文字列のペアが含まれています:

ID_String = "値"

Titleメッセージのタイトル

BeginPrompt Beginプロンプトメッセージ

Progress値は「yes」または「no」です。デフォルト値は「はい」です。

RunProgram実行するためのコマンド。デフォルト値は「setup.exe」です。サブストリング%% Tは、ファイルが抽出された一時フォルダーへのパスに置き換えられます

Directory「RunProgram」のディレクトリプレフィックス。デフォルト値は「。\」です。

ExecuteFile実行するファイルの名前

ExecuteParameters「ExecuteFile」のパラメータ

例えば:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!
35
Molly7244

合意されたソリューションは正しいですが、実際に何をする必要があるかを説明するのに実際には役立ちません!。私はこれと他の多くの解決策を読みましたが、これを行う方法に関する完全で完全な簡単な説明は見つかりませんでした。

私と同じように混乱しています。Molly7244が投稿した内容を達成する方法について、順を追って説明したブログ記事を読んでください。

7Zip -sfxスイッチを使用してsetup.exeを実行する自己解凍アーカイブを作成する方法

リンクが機能しなくなる可能性があることに私の注意が向けられたので、ここに私のブログからの手順があります

手順1-インストールフォルダーのセットアップ

これを簡単にするには、フォルダーc:\ Installを作成します。ここに必要なファイルをすべてコピーします。

ステップ2-7インストーラーを圧縮する

  1. .msiとsetup.exeがあるフォルダーに移動します。
  2. .msiとsetup.exeの両方を選択します
  3. 右クリックして7Zip-> [アーカイブに追加]を選択します
  4. アーカイブに「Installer.7z」(または任意の名前)という名前を付けます
  5. OKをクリック
  6. これで「Installer.7z」ができました。
  7. この.7zファイルをc:\ Installディレクトリにコピーします

ステップ3-7z SDKから7z-Extra sfx拡張モジュールを取得する

7z SDKをダウンロードする必要があります

  1. このリンクをたどって 7Zipをダウンロード
  2. ベータ版には正しいファイルが含まれていないため、19.00バージョン(2019年12月)をダウンロードする必要があります。
  3. SDKダウンロード リンク。
  4. 7Zip SDKファイルを抽出します。
  5. SDKのbinディレクトリから "7zSD.sfx"ファイルをc:\ Installにコピーします

ステップ4-config.txtを設定する

NotePad ++を使用してこのテキストファイルを編集することをお勧めします。UTF-8でエンコードする必要があるため、以下の手順ではnotepad ++を使用しています。

  1. Windows Explorerを使用してc:\ Installに移動します
  2. 右クリックして[新しいテキストファイル]を選択し、config.txtという名前を付けます
  3. 右クリックして[NotePad ++で編集]を選択します
  4. 「エンコードメニュー」をクリックし、「UTF-8でエンコード」を選択します。
  5. 次のように入力します。

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Do you want to install SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!
    

これを編集して、[SOFTWARE v1.0.0.0]を製品名に置き換えます。設定ファイルのパラメーターとオプションに関する注意事項はこちら

チェックポイント

これで、次の3つのファイルを含むフォルダ「c:\ Install」が作成されます。

  1. Installer.7z
  2. 7zS.sfx
  3. config.txt

ステップ5-アーカイブを作成する

これらの説明はウェブで見つけましたが、上記の4つのステップのいずれかを説明するものはどこにもありませんでした。

  1. コマンドウィンドウを開く、ウィンドウ+ R->コマンド-> Enterキーを押す
  2. コマンドウィンドウで次のように入力します。

    cd \
    cd Install
    copy /b 7zSD.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. C:\ Installを見ると、MyInstaller.exeがあることがわかります。

    終了しました

インストーラーを実行する

MyInstaller.exeをダブルクリックすると、メッセージが表示されます。 [OK]をクリックすると、setup.exeが実行されます。

追伸自動化に関する注意

これがc:\ Installディレクトリで機能しているので、「Install.bat」ファイルを作成して、コピースクリプトをその中に配置します。

copy /b 7zSD.sfx + config.txt + Installer.7z MyInstaller.exe

これで、展開パッケージの新しいバージョンを再構築する必要があるたびに、Install.batを編集して実行できます。

23
jcrawfor74

[〜#〜] nsis [〜#〜] も確認する必要があります。これを使用すると、7-Zipが使用するのと同じ方法( [〜#〜] lzma [〜#〜] )で圧縮されたインストーラーを作成できるため、おおよそ同じサイズになるはずです。インストールプロセスを完全に制御できます。

8
Matthew Talbert

Jcrawfor74の答えに基づいて、ここにいくつかの追加情報があります:

7zS.sfxの代わりに、ファイル7zS2.sfx。これははるかに小さいバージョン(28 kB対140 kB)ですが、config.txtファイルをサポートしていません。したがって、copyコマンドでは省略できます。小さな構成スクリプトを作成するだけの場合は、これにより、より小さなEXEファイルを作成できます。

小さいSFXモジュールは質問をしません。ファイルを他のモジュールとして一時フォルダーに抽出し、実行可能な候補を見つけます。ソースコード(ダウンロードページにもあります)によると、C\Util\SfxSetup\SfxSetup.cで、ファイルの名前と拡張子に基づいて異なる重み付けが行われ、最も高いスコアのファイルが選択されます。

少なくともWindows 10では、両方のSFXモジュールが自動的に管理者として実行されます。これは構成できません。この動作はシステム全体のセットアップに望ましい場合がありますが、常にそうであるとは限りません。また、Windowsに何をすべきかを明示的に指示するマニフェストが含まれていないため、この決定はファイルバージョンデータのみに基づいています。 Windows互換性はファイルを調べ、昇格プロンプトにつながる「セットアップ」のような文字列を見つけます。

管理者権限を要求しないSFXモジュールが必要な場合は、ソースからSFXモジュールを再構築するか、または this one のようなリソースエディターでファイルバージョン情報を編集します。上記のResource Hackerがファイルをコンパイルする場合は、FileDescriptionフィールドから「Setup」という単語を削除し、EXEファイルを保存します。また、7zS.sfxまたは7zS2.sfxファイルに対してこの手順を直接実行し、それをどこかに保存して、昇格していないSFXパッケージをビルドするために使用することもできます。そして、これを使用してファイルバージョン情報を完全にカスタマイズし、製品名またはペイロードを説明する何かをその中に置くことができます。

2
ygoe