News Archive

Date

Slow extraction of nsis exe's

I noticed slow extraction of nsis exe's, so I compared uniextract v1.5 vs cmdtotal instexpl.wcx. I obtained cmdtotal and instexpl from uniextract's bin directory.

In both cases, I used the same machine (Athlon 2000+ 512MB RAM Windows Server 2003 sp2 R2) to extract the same nsis exe: privoxy_setup_3_0_6.exe (474kB, http://sourceforge.net/project/showfiles.php?group_id=11118). Runtimes were benchmarked with MS ntimer.exe.

Trial 1 command: ntimer cmdtotal.exe instexpl.wcx x privoxy_setup_3_0_6.exe temp
Trial 1 results (sec): ETime 0:00:00.530 UTime 0:00:00.280 KTime 0:00:00.140 ITime 0:00:00.070

Trial 2 command: ntimer uniextract.exe privoxy_setup_3_0_6.exe temp
Trial 2 results (sec): ETime 0:00:06.879 UTime 0:00:00.570 KTime 0:00:00.200 ITime 0:00:01.191

As you can see, cmdtotal took 0.53 sec while uniextract took 6.879 sec to extract the same nsis exe! Why does uniextract extract so slowly?

Of course, uniextract must first identify privoxy as nsis before extracting (via cmdtotal instexpl.wcx). Running cmdtotal instexpl.wcx directly (i.e. without uniextract) bypasses this identification step and thus must be faster. But does this identification step completely explain the measured difference in speed (0.53 vs 6.879 sec)?

Wishlist: exit when extraction complete

When run via batch file, uniextract exits immediately, after which extraction occurs. The next step in the batch file generally operates on the extracted directories. That's a problem, because they don't exist yet.

A workaround for batch files is adding a fixed delay, e.g.

uniextract nsispackage.exe dir
sleep 8
(operations on dir)

The problem with this workaround is that uniextract takes a different amount of time to extract each exe. To be on the safe side, the delay must be chosen long enough that there is dead time.

Could uniextract be changed to exit when extraction is complete rather than immediately? IMHO that would make uniextract more useful for scripts.

If this change can't be made, how about adding an option to uniextract's installer to append uniextract's bin subdirectory to %path%? That way, a user could extract (for example) an nsis exe with the following code:

cmdtotal instexpl.wcx x nsispackage.exe dir
(operations on dir)

No fixed delay is needed, since cmdtotal does wait until extraction is complete before exiting.

Modal popup when extracting inno exe

Hi,

When extracting an inno exe via command line (e.g. uniextract innopackage.exe /sub), a modal popup button "OK" appears. Uniextract waits until the user clicks the "OK" button before extracting anything.

But when extracting nsis or 7zip exe's, uniextract runs unattended without any "OK" dialog. So to extract exe's via batch file, I can use uniextract if the exe is nsis or 7zip but not if it's inno. (For inno exe's I need to use innounp in uniextract's bin directory.)

Could you change uniextract's behavior so that it can extract any package (including inno) unnattended when run via command line? IMHO that would make uniextract more useful for scripts.

One option would be to make uniextract run unattended by default when run via command line. Another option would be to add a switch (e.g. /q) to invoke unattended operation.

Thank you for Universal Extractor. I just discovered it and am already a fan.