Jump to content
Marc

MakeSFX (Winrar SFX Gui)

Recommended Posts

Marc

Hi Folks,

I've been very fond of portable software. Some of the portable programs are quite large, so to make the using fancier, I started to compress the portable applications into a WinRar SFX Archive which extracts the software to the tempdir, starts the software and afterward deletes the whole temp Dir.

But it got cumbersome to manually extract the icon from the exe, make all necessary settings in the WinRar GUI - so I wrote this script. Nothing spectacular, but (in my eyes) very useful. After that, I added some other options to make it a little more versatile.

Features:

  • if we have a 32Bit and a 64Bit version, it can launch the correct Version (32Bit or 64Bit) fitting to the system the SFX is started on (contains a small exe file "universal_launcher.exe" which expects two parameters  for the 32Bit.exe and 64Bit.exe, checks the current system for 64Bit and then runs the correct file). Powerbasic Sourcecode of the exe file is included, of course.
  • automatically extracts the icon from the chosen exe and uses it as icon for the SFX
  • if the chosen exe file has a version number in it, the version is put in the resulting SFX's filename
  • can just extract the files to a user-chosen directory OR
  • can just extract the files to the program files directory (and, optionally, create a desktop shortcut) OR
  • extract the files to a temp directory and run an exe

Have fun with it :)

best regards,

Marc

2017-10-18 09_48_05-MakeSFX.png

MakeSFX.zip

  • Like 1

It's my job to comfort the disturbed and to disturb the comfortable.
My Projects: Profiler, MakeSFX, UserInfo

Share this post


Link to post
Share on other sites
Marc

v1.1: fixed some bugs

  • now using RunWait instead of Run (so it waits for winrar to get the archiving done)
  • the universal_launcher.exe now waits for the started program to finish (so winrar SFX will wait with deleting the SFX dir)

:>

MakeSFX.zip


It's my job to comfort the disturbed and to disturb the comfortable.
My Projects: Profiler, MakeSFX, UserInfo

Share this post


Link to post
Share on other sites
careca

Hello, couple of questions:

What does the universal_launcher do?

"universal_launcher.exe" which expects two parameters  for the 32Bit.exe and 64Bit.exe, checks the current system for 64Bit and then runs the correct file).

Why not making the check in the script itself?

So this is only for portable applications?

So i select an exe and it compresses to an sfx and uses the icon of the exe i provide?

What if the application is in a folder? can i compress the whole folder?

 


Spoiler

Paster - Main function is to paste text, but has more functions. (No longer mantained, switched to String Trigger)

Renamer - Rename files and folders, remove portions of text from the filename etc.

GPO Tool - Export/Import Group policy settings.

BeatsPlayer - Music player.

Params Tool - Right click an exe to see it's parameters or execute them.

String Trigger - Triggers pasting text or applications or internet links on specific strings.

Inconspicuous - Hide files in plain sight, not fully encrypted.

Regedit Control - Registry browsing history, quickly jump into any saved key.

Time4Shutdown - Write the time for shutdown in minutes.

Power Profiles Tool - Set a profile as active, delete, duplicate, export and import.

Firefox Profile Backup - Backup/restore previously saved profile.

Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes.

NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s.

IUIAutomation - Topic with framework and examples

Au3Record.exe

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • Marc
      By Marc
      Profiler - yet another backup script for Firefox and Thunderbird profiles
      It automatically detects the last recently used profile directories of Firefox and Thunderbird (installed versions, no portables).
      Clicking the Backup-Button creates a complete Backup of the found profiles with a timestamp.
      Restore deletes the according profile dir and extracts the content of the selected archive into the profile directory.
      Uses Winrar as compression tool, but feel free to change it to your needs
      Best regards
      Marc

      Profiler.au3
    • careca
      By careca
      Hey there, im looking for a way to build something similar to winrar sfx archives.
      My idea is to somehow pack files into the exe (maybe fileinstall)
      and be able to extract each one to a specific folder if needed.
      Now here's the tricky part, i can't think of a way to update only part of the files like i do in winrar.
      And it would require some work with command line to be able to somehow get a list of the files packed in, and extract one for example.
      Does anyone know of any way to accomplish this? Also, fileinstall that can use variables would be nice.
      Best regards.
    • bawldiggle
      By bawldiggle
      How do I sync portable SciTE4AutoIt3 with portable AutoIt3 ?
      I have spent hours trawling through FAQs, this forum, and general searches on the web, without any luck
      I would prefer to use portable setup for AutoIt and SciTE etc.  I have downloaded portable ZIP but have not extracted it in case the order of extracting is critical.
      Thank you
    • AlHazred
      By AlHazred
      Just like it says in the title. A scripter from my company gave me a script to make it run, but he's not around anymore, and my drive finally failed with no working backup.
      I run PortableRoboForm (http://www.roboform.com/for-usb-roboform2go-windows) version 6 from a USB drive to automate password management for hundreds of accounts with different passwords.RoboForm lets me do this, and they even have a Portable version, but it's not that portable and I'd like to use it inside a PortableApps (http://portableapps.com/) launcher.
      I'd like to create a script to go to the root of the USB drive and run "PortableRoboForm.exe". PortableApps only sees executables in subdirectories of the \PortableApps folder of the USB drive. RoboForm2Go only installs and executes in the root directory of the USB drive.
      I tried using the fantastic little _GetFileDrive function, but I keep getting an error indicating it's trying to run the file in the subdirectory so obviously I'm not using _GetFileDrive right. Any help for a newbie would be appreciated.
      ; Change the working directory to the root of this file. FileChangeDir(_GetFileDrive(@ScriptDir)) ; Run the PortableRoboForm executable. Run(PortableRoboForm.exe,"") ; Get the drive letter of a filepath. Idea from _PathSplit. Func _GetFileDrive($sFilePath) Return StringLeft($sFilePath, StringInStr($sFilePath, ":", 2, 1) + 1) EndFunc ;==>_GetFileDrive EDIT: Nevermind, found the option to set it up to run from the PortableApps menu.
    • Danyfirex
      By Danyfirex
      Well an Implementation of IPortableDeviceManager Interface to get all Portable Device conected to our pc.
       
      #include <Array.au3> #include <WinAPICom.au3> Opt("MustDeclareVars", 1) Global Const $sCLSID_PortableDeviceManager = "{0af10cec-2ecd-4b92-9581-34f6ae0637f3}" Global Const $sIID_IPortableDeviceManager = "{a1567595-4c2f-4574-a6fa-ecef917b9a40}" Global Const $sTagIPortableDeviceManager = "GetDevices hresult(ptr;dword*); RefreshDeviceList hresult(); " & _ "GetDeviceFriendlyName hresult(wstr;wstr;dword*); GetDeviceDescription hresult(wstr;wstr;dword*); " & _ "GetDeviceManufacturer hresult(wstr;wstr;dword*); GetDeviceManufacturer hresult(wstr;wstr;ptr;dword*dword*); " & _ "GetPrivateDevices hresult(ptr;dword*)" Global Enum $eDevID, $eDevName, $eDevManufacturer, $eDevDescription Local $aPnPDevices = GetPortableDevices() If IsArray($aPnPDevices) Then _ArrayDisplay($aPnPDevices) ;~ Success: Return 0 ;~ Failure: Return 2DArray [n][4] |;[n][0]$eDevID, [n][1]$eDevName, [n][2]$eDevManufacturer,[n][3] $eDevDescription Func GetPortableDevices() Local $aDevicesInfo[0][0] ;[n][0]$eDevID, [n][1]$eDevName, [n][2]$eDevManufacturer,[n][3] $eDevDescription Local $oPortableDeviceManager = 0 Local $SizeofArray = 0 Local $hr = 0x80004005 ;E_Fail Just to Initialized <0 Local $taPnPDeviceIDs = 0 Local $tName = 0 $oPortableDeviceManager = ObjCreateInterface($sCLSID_PortableDeviceManager, $sIID_IPortableDeviceManager, $sTagIPortableDeviceManager) If Not IsObj($oPortableDeviceManager) Then Return 0 If FAILED($oPortableDeviceManager.GetDevices(Null, $SizeofArray)) Then Return 0 If $SizeofArray < 1 Then Return 0 $taPnPDeviceIDs = DllStructCreate("ptr[" & $SizeofArray & "]") If FAILED($oPortableDeviceManager.GetDevices(DllStructGetPtr($taPnPDeviceIDs), $SizeofArray)) Then Return 0 ReDim $aDevicesInfo[$SizeofArray][4] For $i = 0 To $SizeofArray - 1 $tName = DllStructCreate("wchar[512]", DllStructGetData($taPnPDeviceIDs, 1, $i + 1)) $aDevicesInfo[$i][$eDevID] = DllStructGetData($tName, 1) $aDevicesInfo[$i][$eDevName] = _GetFriendlyName($oPortableDeviceManager, $aDevicesInfo[$i][$eDevID]) $aDevicesInfo[$i][$eDevManufacturer] = _GetDeviceManufacturer($oPortableDeviceManager, $aDevicesInfo[$i][$eDevID]) $aDevicesInfo[$i][$eDevDescription] = _GetDeviceDescription($oPortableDeviceManager, $aDevicesInfo[$i][$eDevID]) $tName = 0 _WinAPI_CoTaskMemFree(DllStructGetData($taPnPDeviceIDs, 1, $i + 1)) Next Return $aDevicesInfo EndFunc ;==>GetPortableDevices Func _GetDeviceManufacturer($oInterface, $PnPDeviceID) Local $sString = "" $oInterface.GetDeviceManufacturer($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetDeviceManufacturer Func _GetDeviceDescription($oInterface, $PnPDeviceID) Local $sString = "" Local Const $Size = 128 $oInterface.GetDeviceDescription($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetDeviceDescription Func _GetFriendlyName($oInterface, $PnPDeviceID) Local $sString = "" Local Const $Size = 128 $oInterface.GetDeviceFriendlyName($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetFriendlyName Func _GetProperty($oInterface, $PnPDeviceID) Local $sString = "" Local Const $Size = 128 $oInterface.GetDeviceFriendlyName($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetProperty Func FAILED($hr) Return ($hr < 0) EndFunc ;==>FAILED  
      Saludos
×