Czy możliwe jest uruchomienie pliku po wypakowaniu z archiwum samorozpakowującego 7-Zip (SFX)?

40

Próbuję utworzyć skompresowaną aplikację, którą można wdrożyć.

Obecnie biorę zestaw plików, które opublikowałem z mojego IDE (Visual Studio 2008 - opublikowana aplikacja WPF) i kompresuję je w archiwum 7-Zip SFX.

Moi użytkownicy zapytali, czy mogą „zainstalować jednym kliknięciem” z 7-Zip exe. Podczas tworzenia archiwum istnieje lista parametrów. Czy istnieje sposób na ustawienie kombinacji parametrów w celu wywołania wyodrębnionego pliku wykonywalnego instalatora?

Niestety dokumentacja 7-Zip nie wydaje się obejmować tego scenariusza. Widziałem kilka płatnych aplikacji, które robią coś podobnego do tego, ale staram się, aby narzędzie, które piszę, było wolne od licencjonowanego kodu, abyśmy mogli go używać wewnętrznie.

Mike G.
źródło
Czy możesz wskazać jakieś płatne?
abhishek77in

Odpowiedzi:

35

Musisz pobrać LMZA SDK z 7-Zip . Plik „installer.txt” zawiera dokumentację:

7zSD.sfx to moduł SFX dla instalatorów. 7zSD.sfx używa msvcrt.dll.

Moduły SFX dla instalatorów pozwalają stworzyć program instalacyjny. Taki moduł wypakowuje archiwum do folderu tymczasowego, a następnie uruchamia określony program i usuwa pliki tymczasowe po zakończeniu programu. Archiwum samorozpakowujące się dla instalatorów musi zostać utworzone jako połączenie 3 plików: SFX_Module, Installer_Config, 7z_Archive. Installer_Config jest plikiem opcjonalnym. Aby utworzyć archiwum samorozpakowujące się z instalatora, możesz użyć następującego polecenia:

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

Musisz utworzyć plik config.txt.

Plik konfiguracyjny zawiera polecenia dla Instalatora. Plik zaczyna się od łańcucha ;!@Install@!UTF-8!i kończy na ;!@InstallEnd@!. Plik musi być zapisany w kodowaniu UTF-8. Plik zawiera pary ciągów:

ID_String = „Wartość”

Title Tytuł wiadomości

BeginPrompt Rozpocznij monit

ProgressWartością może być „tak” lub „nie”. Wartość domyślna to „tak”.

RunProgramPolecenie wykonania. Wartość domyślna to „setup.exe”. Podciąg %% T zostanie zastąpiony ścieżką do folderu tymczasowego, w którym wyodrębniono pliki

DirectoryPrefiks katalogu dla „RunProgram”. Wartość domyślna to „. \”

ExecuteFile Nazwa pliku do wykonania

ExecuteParameters Parametry dla „ExecuteFile”

Na przykład:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!
Jason
źródło
1
tak. Próbowałem Trochę niewygodne, ponieważ wszystko jest wierszem poleceń, ale znajdziesz na to dobrą dokumentację. I otrzymuję najlepszą kompresję dostępną za darmo.
Ganesh R.
@MikeG - Ten link jest znacznie dokładniejszy. Wyjaśnił, w jaki sposób uczynić część dekompresyjną całkowicie przezroczystą. Bardzo fajnie, dziękuję!
namuol
5
Uwaga: „Moduły SFX zostały przeniesione do pakietu LZMA SDK” (dostępne na 7-zip.org ) od wersji 9.35 beta.
Lukas
21

Uzgodnione rozwiązanie jest poprawne, ale tak naprawdę nie pomaga w wyjaśnieniu, co naprawdę musisz zrobić! Przeczytałem to i wiele innych rozwiązań i nie mogłem znaleźć pełnych i kompletnych prostych instrukcji, jak to zrobić.

Jestem zdezorientowany tak jak ja, proszę przeczytać mój post na blogu, który zawiera instrukcje krok po kroku, jak osiągnąć to, co opublikował Molly7244.

Jak zrobić samorozpakowujące się archiwum, które uruchamia plik setup.exe z przełącznikiem 7zip -sfx

Zwrócono mi uwagę, że linki mogą wygasnąć, więc oto kroki z mojego bloga

Krok 1 - Skonfiguruj folder instalacyjny

Aby to ułatwić, utwórz folder c: \ Zainstaluj. Tutaj skopiujemy wszystkie wymagane pliki.

Krok 2 - 7Zipuj instalatorów

  1. Przejdź do folderu zawierającego pliki .msi i setup.exe
  2. Wybierz zarówno .msi, jak i setup.exe
  3. Kliknij prawym przyciskiem myszy i wybierz 7Zip -> „Dodaj do archiwum”
  4. Nazwij swoje archiwum „Installer.7z” (lub dowolnie wybraną nazwę)
  5. Kliknij OK
  6. Powinieneś teraz mieć „Installer.7z”.
  7. Skopiuj ten plik .7z do katalogu c: \ Install

Krok 3 - zdobądź moduł rozszerzeń 7z-Extra SFX

Musisz pobrać 7z-Extra.

  1. Kliknij ten link, aby pobrać 7Zip
  2. Musisz pobrać wersję 9.20 (jak w maju 2015 r.), Ponieważ wersja beta nie zawiera prawidłowych plików.
  3. Direct download łącza.
  4. Wyodrębnij dodatkowe pliki 7zip
  5. Skopiuj plik „7zS.sfx” do c: \ Install

Krok 4 - Skonfiguruj plik config.txt

Polecam użycie NotePad ++ do edycji tego pliku tekstowego, ponieważ będziesz musiał zakodować w UTF-8, poniższe instrukcje używają notatnika ++.

  1. Za pomocą Eksploratora Windows przejdź do c: \ Zainstaluj
  2. kliknij prawym przyciskiem myszy i wybierz „Nowy plik tekstowy” i nazwij go config.txt
  3. kliknij prawym przyciskiem myszy i wybierz „Edytuj za pomocą NotePad ++
  4. Kliknij „Menu kodowania” i wybierz „Koduj w UTF-8”
  5. Wpisz coś takiego:

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

Edytuj to, zastępując [OPROGRAMOWANIE v1.0.0.0] nazwą produktu. Uwagi na temat parametrów i opcji pliku instalacyjnego znajdują się tutaj

CheckPoint

Powinieneś teraz mieć folder „c: \ Install” z następującymi 3 plikami:

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

Krok 5 - Utwórz archiwum

Te instrukcje znalazłem w Internecie, ale nigdzie nie wyjaśniłem żadnego z 4 powyższych kroków.

  1. Otwórz okno cmd, Window + R -> cmd -> naciśnij enter
  2. W oknie poleceń wpisz następujące polecenie

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Zajrzyj do c: \ Install, a zobaczysz, że masz plik MyInstaller.exe

  4. Jesteś skończony

Uruchom instalatora

Kliknij dwukrotnie MyInstaller.exe, a wyświetli się komunikat. Kliknij OK, a setup.exe uruchomi się.

Uwaga PS na temat automatyzacji

Teraz, gdy masz to w katalogu c: \ Install, utworzę plik „Install.bat” i wstawię do niego skrypt kopiujący.

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

Teraz możesz po prostu edytować i uruchamiać plik Install.bat za każdym razem, gdy musisz odbudować nową wersję pakietu instalacyjnego.

jcrawfor74
źródło
2
To powinna być zaakceptowana odpowiedź!
noelicus
Czy można przekazać argument wiersza polecenia do ExecuteParameterselementu w config.txt? Na przykład: C:\Install\MyInstaller.exe some_file.txt wykonałby setup.exe some_file.txt.
dthor
Tak to jest. Jak powiedział Matthew-Lundberg w swojej odpowiedzi : „Argumenty przekazane do pliku wykonywalnego SFX są przekazywane do skryptu Install.cmd”
dn
8

Powinieneś także spojrzeć na NSIS . Dzięki niemu możesz stworzyć instalator skompresowany tą samą metodą, której używa 7-Zip ( LZMA ), więc powinien mieć mniej więcej ten sam rozmiar i masz pełną kontrolę nad procesem instalacji.

Matthew Talbert
źródło
2

Opierając się na odpowiedzi jcrawfor74, oto kilka dodatkowych informacji:

Zamiast 7zS.sfx można również użyć pliku 7zS2.sfx . Jest to znacznie mniejsza wersja (28 kB vs. 140 kB), ale nie obsługuje pliku config.txt. Możesz więc po prostu pominąć to w poleceniu kopiowania. Jeśli chcesz po prostu tworzyć małe skrypty konfiguracyjne, pozwala to tworzyć mniejsze pliki EXE.

Mniejszy moduł SFX nie zadaje żadnych pytań. Wyodrębnia pliki do folderu tymczasowego jako drugi moduł, a następnie wyszukuje kandydatów na pliki wykonywalne. Zgodnie z kodem źródłowym (dostępnym również na stronie pobierania) w C \ Util \ SfxSetup \ SfxSetup.c waży pliki w różny sposób na podstawie ich nazwy i rozszerzenia, a następnie wybiera plik o najwyższym wyniku.

Oba moduły SFX działają automatycznie jako Administrator , przynajmniej w systemie Windows 10, i nie można tego skonfigurować. Chociaż takie zachowanie może być pożądane w przypadku konfiguracji ogólnosystemowych, nie zawsze tak jest. Ponadto ta decyzja opiera się wyłącznie na danych dotyczących wersji pliku, ponieważ nie zawiera manifestu, który wyraźnie mówiłby systemowi Windows, co ma robić. Kompatybilność z systemem Windows sprawdza plik i znajduje ciągi znaków, takie jak „Instalator”, które prowadzą do monitu o podniesienie uprawnień.

Jeśli potrzebujesz modułu SFX, który nie prosi o uprawnienia administratora, możesz przebudować moduł SFX ze źródła lub, prościej, edytować informacje o wersji pliku za pomocą edytora zasobów takiego jak ten . Wystarczy usunąć słowo „Setup” z pola FileDescription, w przypadku wspomnianego hakera zasobów skompiluj plik i zapisz plik EXE. Możesz również wykonać ten krok bezpośrednio na pliku 7zS.sfx lub 7zS2.sfx i zatrzymać go gdzieś, abyś mógł go użyć do budowania nie podniesionych pakietów SFX. I możesz użyć tego do pełnego dostosowania informacji o wersji pliku, aby umieścić nazwę produktu lub cokolwiek, co opisuje ładunek.

ygoe
źródło