Skip to content

Instantly share code, notes, and snippets.

@rogeriopradoj
Forked from milolav/Portable_WhatsApp.md
Created July 22, 2018 21:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rogeriopradoj/8d7b27b153516db8f309406d022f7dd7 to your computer and use it in GitHub Desktop.
Save rogeriopradoj/8d7b27b153516db8f309406d022f7dd7 to your computer and use it in GitHub Desktop.
Making WhatsApp desktop application portable

Portable desktop WhatsApp

This tutorial will explain how to make WhatsApp desktop application portable on Windows platform. Maybe this can work for other platforms as well.

For this to work NodeJs and asar package are required.

Download WhatsApp package

Firstly download latest version of WhatsApp. The following link contains all Windows (x64) releases:

https://web.whatsapp.com/desktop/windows/release/x64/RELEASES

Find the release with the highest number that has full suffix. For example WhatsApp-0.2.2478-full.nupkg

The download link would be:

https://web.whatsapp.com/desktop/windows/release/x64/WhatsApp-0.2.2478-full.nupkg

Once downloaded unpack it (it's standard zip file), and go to the \lib\net45 folder. This folder contains the actual application. Copy the contents of that folder to your portable destination. For this example E:\WhatsAppPortable.

Within that folder delete the squirrel.exe to disable automatic updates.

Download NodeJs and install asar

If Node and asar are already installed, this step can be skipped.

Go to https://nodejs.org/download/release/latest/ and download version that ends with -win-x64.7z.

Unpack that archive to E:\node for example. Open cmd.exe, go to Node's folder and install asar.

C:\>cd /d E:\node
E:\node>npm install asar

Make WhatsApp portable

While at cmd unpack electron.asar package from E:\WhatsAppPortable\resources\ folder using asar's extract archive

asar extract E:\WhatsAppPortable\resources\electron.asar E:\WhatsAppPortable\resources\electron_extract

Now go to E:\WhatsAppPortable\resources\electron_extract\browser\ and edit the init.js file using any text editor.

Find the following lines:

app.setPath('userData', path.join(app.getPath('appData'), app.getName()))
app.setPath('userCache', path.join(app.getPath('cache'), app.getName()))

Replace them with:

var appProfileDir = "Profile"
for (let arg of process.argv) {
  if (arg.indexOf('--profile-dir=') === 0) {
    appProfileDir = arg.substr(arg.indexOf('=') + 1)
  }
}
var profilePath = path.join(path.dirname(process.execPath), appProfileDir)
app.setPath('userData', profilePath)
app.setPath('userCache', profilePath)

Save the file and pack it with asar:

asar pack E:\WhatsAppPortable\resources\electron_extract E:\WhatsAppPortable\resources\electron.asar

The electron_extract folder in E:\WhatsAppPortable\resources\ can be deleted now.

Running the portable version

In the previous step the --profile-dir switch is added and Profile is set as default folder. If the WhatsApp is started without the switch it will create and use Profile folder.

If it is started like this:

WhatsApp.exe --profile-dir=MySecondNumber

it will create MySecondNumber folder ad use it as a profile folder.

This provides the ability to run multiple instances of WhatsApp with different profiles on the same computer.

Final thoughts

Adding something like this profile-dir switch can probably be used to make any Electron application portable as long it is not using appData path elsewhere the code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment