- Release Notes
- Getting Started
- Setup and Configuration
- Automation Projects
- Dependencies
- Types of Workflows
- Control Flow
- File Comparison
- Automation Best Practices
- Source Control Integration
- Debugging
- Logging
- The Diagnostic Tool
- Workflow Analyzer
- About Workflow Analyzer
- ST-NMG-001 - Variables Naming Convention
- ST-NMG-002 - Arguments Naming Convention
- ST-NMG-004 - Display Name Duplication
- ST-NMG-005 - Variable Overrides Variable
- ST-NMG-006 - Variable Overrides Argument
- ST-NMG-008 - Variable Length Exceeded
- ST-NMG-009 - Prefix Datatable Variables
- ST-NMG-011 - Prefix Datatable Arguments
- ST-NMG-012 - Argument Default Values
- ST-NMG-016 - Argument Length Exceeded
- ST-NMG-017 - Class name matches default namespace
- ST-DBP-002 - High Arguments Count
- ST-DBP-003 - Empty Catch Block
- ST-DBP-007 - Multiple Flowchart Layers
- ST-DPB-010 - Multiple instances of [Workflow] or [Test Case]
- ST-DBP-020 - Undefined Output Properties
- ST-DBP-021 - Hardcoded Timeout
- ST-DBP-023 - Empty Workflow
- ST-DBP-024 - Persistence Activity Check
- ST-DBP-025 - Variables Serialization Prerequisite
- ST-DBP-026 - Delay Activity Usage
- ST-DBP-027 - Persistence Best Practice
- ST-DBP-028 - Arguments Serialization Prerequisite
- ST-USG-005 - Hardcoded Activity Arguments
- ST-USG-009 - Unused Variables
- ST-USG-010 - Unused Dependencies
- ST-USG-014 - Package Restrictions
- ST-USG-020 - Minimum Log Messages
- ST-USG-024 - Unused Saved for Later
- ST-USG-025 - Saved Value Misuse
- ST-USG-026 - Activity Restrictions
- ST-USG-027 - Required Packages
- ST-USG-028 - Restrict Invoke File Templates
- ST-USG-032 - Required Tags
- ST-USG-034 - Automation Hub URL
- Variables
- Arguments
- Imported Namespaces
- Coded automations
- Introduction
- Registering custom services
- Before and After contexts
- Generating code
- Generating coded test case from manual test cases
- Trigger-based Attended Automation
- Recording
- UI Elements
- Selectors
- Object Repository
- Data Scraping
- Image and Text Automation
- Citrix Technologies Automation
- RDP Automation
- VMware Horizon Automation
- Salesforce Automation
- SAP Automation
- macOS UI Automation
- The ScreenScrapeJavaSupport Tool
- The WebDriver Protocol
- Extensions
- About extensions
- SetupExtensions tool
- UiPathRemoteRuntime.exe is not running in the remote session
- UiPath Remote Runtime blocks Citrix session from being closed
- UiPath Remote Runtime causes memory leak
- UiPath.UIAutomation.Activities package and UiPath Remote Runtime versions mismatch
- The required UiPath extension is not installed on the remote machine
- Screen resolution settings
- Group Policies
- Cannot communicate with the browser
- Chrome extension is removed automatically
- The extension may have been corrupted
- Check if the extension for Chrome is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and Incognito mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- List of extensions for Chrome
- Chrome Extension on Mac
- Group Policies
- Cannot communicate with the browser
- Edge extension is removed automatically
- The extension may have been corrupted
- Check if the Extension for Microsoft Edge is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and InPrivate mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- List of extensions for Edge
- Extension for Safari
- Extension for VMware Horizon
- Extension for Amazon WorkSpaces
- SAP Solution Manager plugin
- Excel Add-in
- Test Suite - Studio
- Troubleshooting
Configure the UiPath Remote Plugin for custom remote applications
With the Extension for Windows Remote Desktop you can natively generate selectors over RDP connections handled by custom remote applications that use the Microsoft RDP ActiveX control.
For example, when a custom application opens the Calculator application from the server, the selector is:
<wnd app='customapp.exe' cls='RAIL_WINDOW' title='Calculator (Remote)' />
After completing the steps described below, the selector becomes:
<wnd app='win32calc.exe' cls='CalcFrame' isremoteapp='1' title='Calculator' />
This allows you to automate the remote application.
- First, follow the steps described in Extension for Microsoft Remote Desktop and Apps to install the extension.
-
The extension updates the
Software\Microsoft\Terminal Server Client\Default\AddIns
registry from either:LocalMachine
- if the extension was installed for the entire systemCurrentUser
- if the extension was installed for a single user
- Check the Registry Editor to make sure the extension changed the registry. This is how it should look like:
- Get a reference to the PluginDLLs configuration.
-
Get the UiPath Extension for Windows Remote Desktop DLLs paths from the
Software\Microsoft\Terminal Server Client\Default\AddIns
registry key's Name subkey, from either:LocalMachine
- if the extension was installed for the entire systemCurrentUser
- if the extension was installed for a single user
- Build a comma-separated string with the DLL paths obtained in the above step.
- Update the PluginDLLs configuration with the newly computed string.
See Microsoft’s Remote Desktop ActiveX control documentation for more details.
In the code snippet below you can see an example of how to set the PluginDLLs configuration with values read from the registry:
…
// Setting the PluginDlls configuration
mstscActiveX.AdvancedSettings7.PluginDlls = GetInstalledPluginDlls();
…
// Getting the DLL paths from the Registry
private string GetInstalledPluginDlls()
{
List<string> pluginDllsPerMachine = GetInstalledPluginDllsFromKey(Registry.LocalMachine);
List<string> pluginDllsPerUser = GetInstalledPluginDllsFromKey(Registry.CurrentUser);
var allPlugins = pluginDllsPerMachine.Concat(pluginDllsPerUser).ToList();
return string.Join(",", allPlugins);
}
private List<string> GetInstalledPluginDllsFromKey(RegistryKey key)
{
List<string> pluginDlls = new List<string>();
try
{
using var regAddIns = key.OpenSubKey(@"Software\Microsoft\Terminal Server Client\Default\AddIns", false);
if (regAddIns != null)
{
foreach (var regAddIn in regAddIns.GetSubKeyNames())
{
using var regAddin = regAddIns.OpenSubKey(regAddIn, false);
var addInName = regAddin.GetValue("Name");
if (addInName != null && addInName.ToString().ToLower().EndsWith(".dll"))
{
pluginDlls.Add(addInName.ToString());
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return pluginDlls;
}
…
// Setting the PluginDlls configuration
mstscActiveX.AdvancedSettings7.PluginDlls = GetInstalledPluginDlls();
…
// Getting the DLL paths from the Registry
private string GetInstalledPluginDlls()
{
List<string> pluginDllsPerMachine = GetInstalledPluginDllsFromKey(Registry.LocalMachine);
List<string> pluginDllsPerUser = GetInstalledPluginDllsFromKey(Registry.CurrentUser);
var allPlugins = pluginDllsPerMachine.Concat(pluginDllsPerUser).ToList();
return string.Join(",", allPlugins);
}
private List<string> GetInstalledPluginDllsFromKey(RegistryKey key)
{
List<string> pluginDlls = new List<string>();
try
{
using var regAddIns = key.OpenSubKey(@"Software\Microsoft\Terminal Server Client\Default\AddIns", false);
if (regAddIns != null)
{
foreach (var regAddIn in regAddIns.GetSubKeyNames())
{
using var regAddin = regAddIns.OpenSubKey(regAddIn, false);
var addInName = regAddin.GetValue("Name");
if (addInName != null && addInName.ToString().ToLower().EndsWith(".dll"))
{
pluginDlls.Add(addInName.ToString());
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return pluginDlls;
}
UiPathRemoteRuntime.msi
installer can be downloaded from:
- Product Downloads in the UiPath Customer Portal
- Resource Center in the UiPath Automation Cloud. To access Resource Center, log in to your Automation Cloud Organization and click the Help button on the navigation bar.