How to setup Eggplant Functional Studio with RLM License Manager and TightVNC on Windows

Heya! Quick note on how to setup and install Eggplant Studio on Windows

What you need:

  1. Eggplant Functional installer
  2. Eggplant license file
  3. RLM installer 
  4. TightVNC remote desktop server

Step 1: Install Eggplant Functional

This one's pretty straightforward, just launch the installer and follow the next steps on there.

Step 2: Download your license file

If you don't have the license file you can download it from your Greenhouse account here

Download the key and you'll get a .lic file

Step 3: Setup RLM license manager

Extract the contents of your RLM download (it will be a zipped file)

Copy RLM_Server_Win to C:\Program Files

Paste your license file inside RLM_Server_Win

Run RLM as a service
  • Open CLI as Admin
  • Navigate to Program Files\RLM_Server_Win folder
     cd C:\Program Files\RLM_Server_Win
  • Run the following command
    rlm -install_service -dlog <server.log>

At this point, RLM service would've been created but it's still stopped.
To start the service: Open Task Manager >> Services tab >> Look for RLM and start it

Now that it's running, check by launching Eggplant Functional
It shouldn't ask for a license anymore

Step 4: Setup SUT

Install TightVNC on the machine/s you want to remotely control using Eggplant

Go back to Eggplant functional, create a new connection and test it out



How to write logs with newline using IO.write in Ajax Truclient

Suppose you want to create your own log file, here's how to do that in Ajax Truclient using the Evaluate Javascript action from the Toolbox.

So, drag it onto your script, make sure it's inside an Action and not in vuser_init or vuser_end. It didn't work when I initially placed it inside vuser_init and I'm not sure why.

To write to a text file, basically you just need to use IO.write in this format

IO.write(filename[string], input[string], append[boolean], charset[string]);

In my case, since I want to add a timestamp and a newline after every log, here's what I used:

var currentDate = new Date();
IO.write("C:\\Data\\Logs\\logs.txt",currentDate.toLocaleString() + " >>> ",true,"UTF-8");
  • On line 1 I created a date variable
  • On line 2 I used toLocaleString() method to output the date time in a readable format based on the machine's default locale. In my case it's en-US. You can add parameters to this to specify a different locale. Also, make sure to escape the slashes on the path.
  • On line 3 I appended my log message which says hello
  • On line 4 I appended a carriage return and a newline using \r\n because sometimes \n alone doesn't work

Running it 3x produces this output. Note that it automatically creates the file if it doesn't exist BUT it doesn't create directories.

ALTERNATIVELY, you can also use the Generic API Action from the toolbox to execute the IO.write function.

Just change the category to IO, method name to write, and put it your arguments. It's essentially the same as IO.write but with less coding involved hehe

Hope this helps!


How to use isRegExpMatch descriptor on Ajax Truclient

For example you are waiting for an object with a message like

"6 card(s) processed successfully."

where 6 could be any number. Here's how to use isRegExpMatch descriptor to identify that object.

First, change the ID method of the object to Descriptors and open the Descriptors Editor.

Then, add a text property (if it's not already there) and set the operator to isRegExpMatch.
When using isRegExpMatch, make sure the value type is set to JS.

Now for the value, I'm not an exepert at regex so I make use of online regex tools to generate the correct expression. I use, set the regex engine to Javascript, paste the text I want to match on the textarea, and play around with capturing groups until it matches the entire text.

Here's the regex expression that perfectly matches the entire text:

/(.*) card\(s\) processed successfully./g

There are other variations to this, but this is what worked for me hehe.

When entering the regex value back on the descriptors editor, make sure to include the open and close slashes and the g modifier at the end (in red).

If you notice, the parentheses in (s) are also escaped (in green).

You can always test the descriptor by highlighting the object when it's visible on the page.

Here's another example:

Say you want to match an object with a name like this, where there's a random alphanumeric element in between the path...


Same thing! Pull up a regex editor..
- replace the dynamic parts with a capturing group
- escape the forward slashes
- enclose the pattern in slashes
- add a g modifier

Here's the expression for that:


Hope this helps!


[UIPath] "You have exceeded your profile storage space..." Error when running on Windows Server

Here's something we encountered recently that kept us from running a task smoothly. We migrated our scripts to a virtual server machine which is very different from where we developed the script (desktop). Our first struggle was getting rid of this pesky profile storage space error that kept on popping up midway into running a task.

Turns out when you run a robot, it extracts the robot package and downloads all its dependencies on a dedicated folder inside the local user profile directory. Usually here: C:\Users\<username>\.nuget\packages

Which means there's a copy of a robot script being created for every user who logs in and runs the same task. Imagine the waste of space.

We didn't realize this was a problem because this error doesn't come up on a regular desktop. Also, I'm pretty sure our desktop profile storage space isn't just 50MB haha. 

There are 2 ways to get rid of this error.

One is to configure UiPath.config to assign a dedicated folder where the robot extracts the packages to so it doesn't flood the user profile. The other is to increase or unset your local profile storage space. Let's discuss both:

Option 1

Thank God I ran into this forum post while looking for solutions!

  1. Open uipath.config on a text editor. It's usually inside
    C:\Program Files (x86)\UiPath\Studio\uipath.config

  2. Add this line inside <packageSettings>

    <add key="packagesInstallationFolder" value="D:\Data\NugetPackages\" />

    Replace the text in red with your preferred directory, somewhere away from your user profile directory, preferably in a different drive. I set ours inside D:\Data because sometimes regular accounts don't have access to C:\ drive on a server

  3. Save uipath.config and restart the robot service for the changes to take effect
    Open Task Manager >> Services >> Right click on UiRobotSvc and restart the service

  4. Run a robot task to test. The extracted files should now be saved at the packages installation folder you set up.
Option 2

For this option to work you need to have admin rights.

  1. Run gpedit.msc or open your Local Group Policy Editor
  2. Navigate to User Configuration >> Administrative Templates >> System >> User Profiles

  3. Open the property Limit Profile Size and adjust the max profile size or set it to Not Configured

  4. Apply to save changes and you're done.

Hope this helps! :)


How to deactivate UiPath license locally

Here's how you can deactivate your UiPath license yourself so you can use the license key on another machine. Granted, you still have access to the local machine where UiPath is installed. Otherwise, get in touch with UiPath support for a deactivation request.


1. Login to the machine where UiPath is insalled
2. Open the command line and run the following:

"C:\Program Files (x86)\UiPath\Studio\UiPath.LicenseTool.exe" deactivation-request

Make sure the location of UiPath.LicenseTool.exe is correct

3. Copy the resulting Deactivation Token
4. Navigate to and paste the deactivation request token on the text area

5. Click the Deactivate License button and you're done

Now you can use the same license key on another machine. If it doesn't work automatically right after you deactivated the license key, try the manual activation option instead. 

How to create a "run as different user" shortcut for SQL Server

Problem: I always need to open SQL Server using my admin account but I don't want to keep on doing right click + run as different user, then type my admin username and super long admin password.

My solution? I created a shortcut that launches SQL Server using a different user. Now all I have to do Run "sqlserver" and the app will automatically open using my admin account. Saved me a lot of keystrokes! Hahaha


Create a shortcut to SQL Server with the following target and place it in your User folder.

C:\Windows\System32\runas.exe /savecred /user:domain\surfandperf-admin "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"

In detail:

  1. Navigate to where your SQL Server executable file is.
    Usually it's inside C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\ as ssms.exe
  2. Right click ssms.exe >> Send to >> Desktop (creates a shortcut)
  3. On your Desktop >> right click the SQL Server shortcut created >> go to Properties >> update the target to this:

    C:\Windows\System32\runas.exe /savecred /user:domain\surfandperf-admin "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"

    Basically I just prepended the target with the red text, making sure to replace the /user:domain\surfandperf-admin part with the domain and username I want to login with.

    I used /savecred to save the password for future launches

  4. Move to the shortcut to your user folder and rename it with whatever you want the shortcut name to be. Your user folder is inside C:\Users

  5. Now you can launch it using the run dialog (Win + R).

On first launch it will ask for a password, then it will remember it until you change your password.

Hope it works! I really just want fewer clicks and keystrokes for everything hehe.