เป็นไปได้ไหมที่จะเรียกใช้งานไฟล์หลังจากแตกไฟล์จากไฟล์เก็บถาวรแบบขยายตัวด้วยตัวเอง 7-Zip (SFX)?


40

ฉันพยายามสร้างแอปพลิเคชันที่บีบอัดได้

ขณะนี้ฉันกำลังใช้ชุดไฟล์ที่ฉันเผยแพร่จาก IDE ของฉัน (Visual Studio 2008 - แอปพลิเคชันที่เผยแพร่ WPF) และบีบอัดไฟล์เหล่านั้นในไฟล์เก็บถาวร SFX 7-Zip

ผู้ใช้ของฉันถามว่าพวกเขาสามารถ "คลิกเดียวติดตั้ง" จาก exe 7-Zip มีรายการพารามิเตอร์เมื่อฉันสร้างที่เก็บถาวร มีวิธีตั้งค่าการรวมกันของพารามิเตอร์บางอย่างเพื่อเรียกใช้โปรแกรมติดตั้งที่แตกออกมาหรือไม่?

น่าเสียดายที่เอกสาร 7-Zip ดูเหมือนจะไม่ครอบคลุมสถานการณ์นี้ ฉันเคยเห็นแอปพลิเคชั่นแบบชำระเงินหลายอย่างที่ทำสิ่งนี้คล้ายกัน แต่ฉันพยายามเก็บเครื่องมือที่ฉันเขียนโดยไม่ต้องมีรหัสลิขสิทธิ์เพื่อให้เราสามารถใช้ภายในได้


คุณช่วยชี้ไปที่คนที่จ่ายเงินบ้างไหม?
abhishek77in

คำตอบ:


35

คุณจะต้องดาวน์โหลดLMZA SDK จาก 7-Zip ไฟล์ "installer.txt" มีเอกสารประกอบ:

7zSD.sfx เป็นโมดูล SFX สำหรับตัวติดตั้ง 7zSD.sfx ใช้ msvcrt.dll

โมดูล SFX สำหรับผู้ติดตั้งอนุญาตให้สร้างโปรแกรมติดตั้ง โมดูลดังกล่าวแยกไฟล์เก็บถาวรไปยังโฟลเดอร์ temp จากนั้นเรียกใช้โปรแกรมที่ระบุและลบไฟล์ temp หลังจากสิ้นสุดโปรแกรม ไฟล์เก็บถาวรแบบขยายด้วยตนเองสำหรับตัวติดตั้งจะต้องสร้างขึ้นเมื่อเข้าร่วม 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 = "Value"

Title ชื่อสำหรับข้อความ

BeginPrompt เริ่มต้นข้อความแจ้ง

Progressค่าสามารถเป็น "ใช่" หรือ "ไม่" ค่าเริ่มต้นคือ "ใช่"

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@!

1
ใช่. ฉันได้ลองแล้ว เพราะทุกอย่างอึดอัดใจเล็กน้อยคือบรรทัดคำสั่ง แต่คุณจะพบเอกสารที่ดีสำหรับมัน และฉันได้รับการบีบอัดข้อมูลที่ดีที่สุดฟรี
Ganesh R.

@MikeG - ลิงค์นั้นละเอียดยิ่งขึ้น มันอธิบายถึงวิธีการทำให้ส่วนการบีบอัดโปร่งใสอย่างสมบูรณ์ ดีมาก - ขอบคุณ!
namuol

5
โปรดทราบว่า "โมดูล SFX ถูกย้ายไปยังแพ็คเกจ LZMA SDK" (มีให้ใน7-zip.org ) ตั้งแต่เวอร์ชัน 9.35 เบต้า
Lukas

21

วิธีแก้ปัญหาที่ตกลงกันนั้นถูกต้อง แต่จริงๆแล้วมันไม่ได้ช่วยอธิบายสิ่งที่คุณต้องทำจริง ๆ ! ฉันอ่านนี่และวิธีแก้ปัญหาอื่น ๆ อีกมากมายและฉันไม่สามารถหาคำแนะนำที่สมบูรณ์และครบถ้วนเกี่ยวกับวิธีการทำสิ่งนี้ได้

ฉันสับสนเหมือนเดิมโปรดอ่านบล็อกโพสต์ของฉันซึ่งให้คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีการบรรลุสิ่งที่ Molly7244 โพสต์

วิธีสร้างไฟล์เก็บถาวรแบบขยายตัวเองที่รัน setup.exe ด้วยสวิตช์ 7zip -sfx

มันมาถึงความสนใจของฉันที่ลิงค์สามารถกลายเป็นตายดังนั้นนี่คือขั้นตอนจากบล็อกของฉัน

ขั้นตอนที่ 1 - ตั้งค่าโฟลเดอร์การติดตั้งของคุณ

เพื่อให้ง่ายต่อการสร้างโฟลเดอร์ c: \ Install ที่นี่เราจะคัดลอกไฟล์ที่จำเป็นทั้งหมด

ขั้นตอนที่ 2 - 7 ซิปตัวติดตั้งของคุณ

  1. ไปที่โฟลเดอร์ที่มี. msi และ setup.exe ของคุณ
  2. เลือกทั้ง. msi และ setup.exe
  3. คลิกขวาและเลือก 7Zip -> "เพิ่มลงในที่เก็บถาวร"
  4. ตั้งชื่อไฟล์เก็บถาวร "Installer.7z" (หรือชื่อที่คุณเลือก)
  5. คลิกตกลง
  6. ตอนนี้คุณควรมี "Installer.7z"
  7. คัดลอกไฟล์. 7z นี้ไปยังไดเรกทอรี c: \ Install

ขั้นตอนที่ 3 - รับโมดูลส่วนขยาย sfx 7z-Extra

คุณต้องดาวน์โหลด 7z-Extra

  1. ตามลิงค์นี้เพื่อไปดาวน์โหลด 7Zip
  2. คุณต้องดาวน์โหลดเวอร์ชั่น 9.20 (เป็น @ พฤษภาคม 2558) เนื่องจากเบต้าไม่มีไฟล์ที่ถูกต้อง
  3. ดาวน์โหลดโดยตรงการเชื่อมโยง
  4. แตกไฟล์เสริม 7zip
  5. คัดลอกไฟล์ "7zS.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] ด้วยชื่อผลิตภัณฑ์ของคุณ หมายเหตุเกี่ยวกับพารามิเตอร์และตัวเลือกสำหรับไฟล์ติดตั้งอยู่ที่นี่

ด่าน

ตอนนี้คุณควรจะมีโฟลเดอร์ "c: \ Install" พร้อมไฟล์ 3 ไฟล์ต่อไปนี้:

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

ขั้นตอนที่ 5 - สร้างการเก็บถาวร

คำแนะนำเหล่านี้ที่ฉันพบบนเว็บ แต่มันก็ไม่ได้อธิบายขั้นตอนใด ๆ ของ 4 ขั้นตอนข้างต้น

  1. เปิดหน้าต่าง cmd, Window + R -> cmd -> กด Enter
  2. ในหน้าต่างคำสั่งพิมพ์ต่อไปนี้

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. ดูใน c: \ Install และตอนนี้คุณจะเห็นว่าคุณมี MyInstaller.exe

  4. เสร็จแล้ว

เรียกใช้โปรแกรมติดตั้ง

ดับเบิลคลิกที่ MyInstaller.exe จากนั้นระบบจะแจ้งข้อความของคุณ คลิกตกลงและไฟล์ setup.exe จะทำงาน

PS Note เกี่ยวกับระบบอัตโนมัติ

ตอนนี้คุณทำงานได้ในไดเรกทอรี c: \ Install ฉันจะสร้างไฟล์ "Install.bat" และใส่สคริปต์คัดลอกไว้

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

ตอนนี้คุณสามารถแก้ไขและเรียกใช้ Install.bat ได้ทุกครั้งที่คุณต้องการสร้างแพ็คเกจการปรับใช้รุ่นใหม่


2
นี่ควรเป็นคำตอบที่ยอมรับได้!
noelicus

มันเป็นไปได้ที่จะผ่านการหาเรื่องบรรทัดคำสั่งไปยังExecuteParametersรายการในconfig.txt? ตัวอย่างเช่นจะดำเนินการC:\Install\MyInstaller.exe some_file.txt setup.exe some_file.txt
dthor

ใช่แล้ว. ดังที่ matthew-lundberg กล่าวในคำตอบของเขาว่า "อาร์กิวเมนต์ที่ส่งผ่านไปยัง SFX ที่ปฏิบัติการได้ถูกส่งผ่านไปยังสคริปต์ Install.cmd"
dthor

8

นอกจากนี้คุณยังควรมีลักษณะที่NSIS ด้วยคุณสามารถสร้างตัวติดตั้งที่ถูกบีบอัดด้วยวิธีเดียวกับที่ 7-Zip ใช้ ( LZMA ) ดังนั้นมันควรจะมีขนาดเท่ากันและคุณสามารถควบคุมกระบวนการติดตั้งได้อย่างสมบูรณ์


2

คำตอบของ jcrawfor74 ต่อไปนี้เป็นข้อมูลเพิ่มเติม:

แทนที่จะเป็น7zS.sfxคุณสามารถใช้ไฟล์7zS2.sfxได้เช่นกัน นี่เป็นรุ่นที่เล็กกว่ามาก (28 kB เทียบกับ 140 kB) แต่ไม่รองรับไฟล์ config.txt ดังนั้นคุณสามารถปล่อยมันไว้ในคำสั่งคัดลอก หากคุณเพียงต้องการสร้างสคริปต์การกำหนดค่าเล็ก ๆ นี้จะช่วยให้คุณสร้างไฟล์ EXE ที่เล็กลง

โมดูล SFX ขนาดเล็กไม่ถามคำถามใด ๆ มันแยกไฟล์ไปยังโฟลเดอร์ชั่วคราวเป็นโมดูลอื่นแล้วหาผู้สมัครที่ปฏิบัติการได้ ตามซอร์สโค้ด (มีอยู่ในหน้าดาวน์โหลด) ใน C \ Util \ SfxSetup \ SfxSetup.c มันมีน้ำหนักไฟล์แตกต่างกันไปตามชื่อและนามสกุลของพวกเขาแล้วเลือกไฟล์เกณฑ์การให้คะแนนสูงสุด

ทั้งโมดูล SFX ทำงานโดยอัตโนมัติในฐานะผู้ดูแลระบบอย่างน้อยใน Windows 10 และไม่สามารถกำหนดค่านี้ได้ ในขณะที่พฤติกรรมนี้อาจเป็นที่ต้องการสำหรับการตั้งค่าทั้งระบบนี่อาจไม่ใช่กรณี นอกจากนี้การตัดสินใจนี้ขึ้นอยู่กับข้อมูลรุ่นของไฟล์เท่านั้นเนื่องจากไม่มีรายการรวมที่บอก Windows ว่าจะต้องทำอย่างไร ความเข้ากันได้ของ Windows จะดูที่ไฟล์และค้นหาสตริงเช่น "ตั้งค่า" ที่นำไปสู่การยกระดับพรอมต์

หากคุณต้องการโมดูล SFX ที่ไม่ได้ขอสิทธิ์ดูแลระบบคุณสามารถสร้างโมดูล SFX จากแหล่งที่มาหรือง่ายแก้ไขข้อมูลรุ่นของแฟ้มที่มีการแก้ไขทรัพยากรเช่นนี้ เพียงแค่เอาคำว่า "ตั้งค่า" ออกจากช่อง FileDescription ในกรณีที่ Resource Hacker ดังกล่าวรวบรวมไฟล์และบันทึกไฟล์ EXE คุณสามารถทำขั้นตอนนี้กับไฟล์ 7zS.sfx หรือ 7zS2.sfx ได้โดยตรงและเก็บไว้ที่อื่นเพื่อให้คุณสามารถใช้มันเพื่อสร้างแพ็คเกจ SFX ที่ไม่ได้ยกระดับ และคุณสามารถใช้สิ่งนี้เพื่อปรับแต่งข้อมูลเวอร์ชันไฟล์ให้สมบูรณ์เพื่อใส่ชื่อผลิตภัณฑ์ของคุณหรืออะไรก็ได้ที่อธิบายถึงส่วนของข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.