Aprire un file compresso .exe con codice vb.net

di il
12 risposte

Aprire un file compresso .exe con codice vb.net

Salve,
Non riesco a scompattare un file archivio con estensione .exe. Utilizzando la classe ZipFile questo file non viene riconosciuto.
Ho provato, allora, a rinominare il file con estensione .zip e usare la classe ZipFile per scompattarlo, come da codice seguente:
My.Computer.FileSystem.RenameFile(Application.StartupPath & "\ark_comter.exe", "ark_comter.zip") 
     
            ZipFile.ExtractToDirectory(Application.StartupPath & "\ark_comter.zip", Application.StartupPath)
a sempre funzionato perfettamente, da qualche giorno non funziona più segnala un errore:
System.IO.InvalidDataException: 'Impossibile trovare il record di fine della directory centrale.
Preciso che il file .exe prima di rinominarlo in .zip, ho provato a scompattarlo con l'utility di windows, con 7-zip, e ciò avviene senza problemi.
Utilizzo Visual Studio Community 2019, ultimamente ho installato un aggiornamento, può essere questo il motivo?
Qualche suggerimento per risolvere il problema o un codice alternativo.

Grazie
Giorgio

12 Risposte

  • Re: Aprire un file compresso .exe con codice vb.net

    Giorgio ha scritto:


    Non riesco a scompattare un file archivio con estensione .exe. Utilizzando la classe ZipFile questo file non viene riconosciuto.
    Siamo sicuri che si tratti di un file ZIP "verace"?
    Quali sono i primi due byte che vedi nel file?
  • Re: Aprire un file compresso .exe con codice vb.net

    Non so, è un file che prelevo da internet al seguente link:
    https://swdownload2.agenziaentrate.gov.it/pub/docfa4004/ark_comter.exe
    Come faccio a leggere i primo due byte del file? Puoi verificarlo tu scaricando il file dal link sopra?
    Grazie
    Giorgio
  • Re: Aprire un file compresso .exe con codice vb.net

    Giorgio ha scritto:


    Non so, è un file che prelevo da internet al seguente link:
    https://swdownload2.agenziaentrate.gov.it/pub/docfa4004/ark_comter.exe
    Come faccio a leggere i primo due byte del file? Puoi verificarlo tu scaricando il file dal link sopra?
    Grazie
    Giorgio

    Header: 4D 5A (MZ)
    COM, DLL, DRV, EXE, PIF, QTS, QTX, SYS Windows/DOS executable file
    (See The MZ EXE File Format page for the structure of an EXE file, with coverage of NE, TLINK, PE, self-extracting archives, and more.)
    Note: MZ are the initals of Mark Zbikowski, designer of the DOS executable file format.
  • Re: Aprire un file compresso .exe con codice vb.net

    Rubik ha scritto:


    Header: 4D 5A (MZ)
    Ok, quindi NON è un file zip.
  • Re: Aprire un file compresso .exe con codice vb.net

    Il file che cerchi di decompattare, si decomprime senza problemi con WinRAR.
    Da codice VB.Net puoi semplicemente usare unrar.exe.
    
    Shell(Application.StartupPath & "\unrar.exe e ark_comter.exe")
    
    La semplice riga sopra, manda in esecuzione unrar.exe, che decomprime il file e mette nella stessa cartella i file decompressi
    Naturalmete nel percorso dell'eseguibile deve esistere unrar.exe (lo trovi nella cartella \programmi\WinRAR\) e ark_comter.exe (senza bisogno di essere rinominato)

    Hai scritto che con 7-zip, lo decomprimi senza problemi, se non hai WinRAR, forse puoi fare la stessa cosa con 7-zip, devi solo trovare l'exe giusto ed usalo al posto di unrar.exe
  • Re: Aprire un file compresso .exe con codice vb.net

    Questa lib potrebbe forse esserti utile https://github.com/adoconnection/SevenZipExtracto ,non l'ho provata...
  • Re: Aprire un file compresso .exe con codice vb.net

    Sulla base di quanto mi ha suggerito Rubik, ho scritto il seguente codice:
     Dim FileName As String = (Application.StartupPath & "\ark_comter.exe")
                
                    Dim startInfo As New ProcessStartInfo(FileName) With {
                     .WindowStyle = ProcessWindowStyle.Normal
                     }
    
                    Process.Start(startInfo).WaitForExit()
    
    Ma, purtroppo, apre la finestra di WinRar per conferma cartella di destinazione. E' possibile impostare e confermare la cartella di destinazione tramite codice senza aprire la suddetta finestra?
    Grazie
    Giorgio
  • Re: Aprire un file compresso .exe con codice vb.net

    Prova a vedere questa proprietà https://docs.microsoft.com/it-it/dotnet/api/system.diagnostics.processstartinfo.createnowindow?view=net-5.0 e l'esempio proposto
  • Re: Aprire un file compresso .exe con codice vb.net

    Giorgio ha scritto:


    Sulla base di quanto mi ha suggerito Rubik, ho scritto il seguente codice:
     Dim FileName As String = (Application.StartupPath & "\ark_comter.exe")
                
                    Dim startInfo As New ProcessStartInfo(FileName) With {
                     .WindowStyle = ProcessWindowStyle.Normal
                     }
    
                    Process.Start(startInfo).WaitForExit()
    
    Ma, purtroppo, apre la finestra di WinRar per conferma cartella di destinazione. E' possibile impostare e confermare la cartella di destinazione tramite codice senza aprire la suddetta finestra?
    Grazie
    Giorgio
    questo non è il codice che ti ho proposto, con questo codice apri un file con l'applicazione associata.

    -------------------------- UNRAR --------------------------
    il mio codice è:
    
    Shell(Application.StartupPath & "\unrar.exe e ark_comter.exe")
    
    eseguendo questa semplice riga nel percorso dell'applicazione troverai i file decompressi
    nel percorso dell'applicazione ci deve essere oltre a: ark_comter.exe, anche unrar.exe (lo devi copiare prendendolo da ...\Program Files\WinRAR\

    se vuoi che i file decompressi siano inviati ad una cartella esistente, nell'esempio "c:\tmp":
    
    Shell(Application.StartupPath & "\unrar.exe e ark_comter.exe c:\tmp")
    
    -------------------------- 7-zip --------------------------
    Ho fatto la prova con 7-zip e funziona perfettamente basta scrivere:
    
    Shell(Application.StartupPath & "\7z.exe e ark_comter.exe")
    
    nel percorso dell'applicazione ci deve essere oltre a: ark_comter.exe, anche 7z.exe e 7z.dll (li devi copiare prendendoli da ...\Program Files\7-Zip\

    se vuoi che i file decompressi siano inviati ad una cartella, se non esiste viene creata, nell'esempio "c:\tmp":
    
    Shell(Application.StartupPath & "\7z.exe e ark_comter.exe -oc:\tmp")
    
    Nota che se nel Pc 7-zip è installato 7z.dll non serve copiarlo nella cartella dell'eseguibile, ma se 7-zip, non è presente nel Pc dove verrà usato il programma, nella cartella dell'eseguibile occorrono ambedue i file 7z.exe e 7z.dll
  • Re: Aprire un file compresso .exe con codice vb.net

    Https://sevenzip.osdn.jp/chm/cmdline/commands/extract.htm ,l'opzione -o imposta la cartella di output
    https://sevenzip.osdn.jp/chm/cmdline/switches/output_dir.htm
  • Re: Aprire un file compresso .exe con codice vb.net

    Grazie Rubik,
    ho dovuto modificare il tuo codice come segue:

    Shell(Application.StartupPath & "\7z.exe e ark_comter.exe",,True)

    in quanto 7z.exe scompattava il file in ritardo e quindi la mia applicazione non trovava il file decompresso.
    Ora funziona perfettamente.
    Ringrazio, anche tutti gli altri che mi hanno risposto
  • Re: Aprire un file compresso .exe con codice vb.net

    Giorgio ha scritto:


    Grazie Rubik,
    ho dovuto modificare il tuo codice come segue:

    Shell(Application.StartupPath & "\7z.exe e ark_comter.exe",,True)

    in quanto 7z.exe scompattava il file in ritardo e quindi la mia applicazione non trovava il file decompresso.
    Ora funziona perfettamente.
    Ringrazio, anche tutti gli altri che mi hanno risposto
    Giusto, con true si attende che il processo sia terminato.
    Ti potrebbe tornare utile anche sapere come si sovrascrivono i file se esistono:
    
    Shell(Application.StartupPath & "\7z.exe e ark_comter.exe -aoa -oc:\temp", , True)
    
    -aoa = sovrascrive i files senza prompt
    -o = cartella di output
Devi accedere o registrarti per scrivere nel forum
12 risposte