How to programmatically register Thinfinity® VirtualUI™ applications

thinfinitycodegears
Thinfinity VirtualUI comes with a configuration library that allows for an automatic and transparent programmatic registration of an application on your Thinfinity VirtualUI Server. This way, you can avoid leaving this registration and configuration process in the hands of the end user.
Thinfinity VirtualUI’s configuration library allows you to:

  • Activate/deactivate licenses.
  • Manage Remote Desktop accounts (RDS accounts).
  • Configure general server settings.
  • Manage certificates.
  • Create and/or modify profiles, as we do from the manager.
  • Hide or display manager options.

The following examples, written in Delphi and C#, explain how to create and/or modify (if it already exists) the registration (profile) of an application.
Delphi Version:

procedure TFormMain.createProfileButtonClick(Sender: TObject);
var
  profiles: IProfiles;
  profile: IProfile;
  icon: TPngImage;
  virtualPath: string;
  p: integer;
begin
  virtualPath := 'demoapp';
  profile := nil;
  profiles := Server.Profiles;
  // Check if the profile to create already exists.
  // In this case, we've been using the VirtualPath which,
  //   if defined, must be unique.
  // We could check by a different field.
  // For example, by the executable path and name.
  p := 0;
  while ((p < profiles.Count) and not Assigned(profile)) do
  begin
     if (profiles.Item[p].VirtualPath = virtualPath) then
         profile := profiles.Item[p]
     else
         Inc(p);
  end;
  if (not Assigned(profile)) then
  begin
     // Adds a new empty profile to the Server:
     profile := Server.Profiles.Add;
     // Set the VirtualPath property (this value must be unique).
     profile.VirtualPath   := 'demoapp';
  end;
  // Set basic profile properties:
  // - UserName and Password must be a valid Windows Account
  //   in the VirtualUI server machine:
  profile.Name          := 'Demo Application';
  profile.FileName      := 'C:\path_to_app\demo.exe';
  profile.UserName      := 'windows_user';
  profile.Password      := 'user_password';
  profile.ProfileKind   := PROFILE_App;
  // If needed, you can set other properties
  // like Arguments, StartDir, etc.
  // Set profile icon, in this case from external file
  // (you can also extract the application icon,
  // convert to PNG, and pass to IconToBase64):
  icon := TPngImage.Create;
  icon.LoadFromFile('demo_icon.png');
  profile.IconData := IconToBase64(icon);
  icon.Free;
  // Save changes:
  Server.Save;
end;

.Net (C#) Version:

using Cybele.Thinfinity.Settings.VirtualUI;
…
private Server m_VirtualUIConfig = new Server();
…
private void createProfileButton_Click(object sender, EventArgs e)
{
    string virtualPath = "demoapp";
    IProfile profile = null;
    IProfiles profiles = m_VirtualUIConfig.Profiles;
    // Check if the profile to create already exists.
    // In this case, we've been using the VirtualPath which,
    // if defined, must be unique.
    // We could check by a different field. for example,
    // by the executable path and name.
    int p = 0;
    while (p < profiles.Count && profile == null)
    {
       if (profiles[p].VirtualPath != null &&
           profiles[p].VirtualPath.Equals(virtualPath))
       {
           profile = profiles[p];
       }
       else
       {
           p++;
       }
    }
    if (profile == null)
    {
       // Adds a new empty profile to the Server:
       profile = m_VirtualUIConfig.Profiles.Add();
       // Set the VirtualPath property (this value must be unique).
       profile.VirtualPath = "demoapp";
    }
    // Set basic profile properties:
    // - VirtualPath must be unique.
    // - UserName and Password must be a valid Windows Account
    //   in the VirtualUI server machine:
    profile.Name = "Demo Application";
    profile.FileName = @"C:\path_to_app\demo.exe";
    profile.UserName = "windows_user";
    profile.Password = "user_password";
    profile.ProfileKind = ProfileKind.PROFILE_APP;
    //If needed, you can set other properties
    //like Arguments, StartDir, etc.
    // Set profile icon, in this case from external file
    // (you can also extract the application icon, convert
    // to PNG, and pass to IconToBase64):
    Bitmap icon = (Bitmap)Image.FromFile("demo_icon.png");
    profile.IconData = ServerUtils.IconToBase64(icon);
    // Save changes:
    m_VirtualUIConfig.Save();
}

 

Changing Thinfinity VirtualUI Server manager’s tabs visibility

You can also programmatically set the visibility of the tabs in the Thinfinity VirtualUI Server manager (in particular, the one with the application profiles).
The code presented below (Delphi) shows how:

procedure TFormMain.hideAppTabButtonClick(Sender: TObject);
begin
  // This hides the "Applications" tab in the VirtualUI Server Manager:
  Server.HideSection(SRVSEC_Applications);
  // Save changes:
  Server.Save;
end;

The C# version is as follows:

private void hideAppTabButton_Click(object sender, EventArgs e)
{
    // This hides the "Applications" tab in the VirtualUI Server Manager:
    m_VirtualUIConfig.HideSection(ServerSection.SRVSEC_APPLICATIONS);
    // Save changes:
    m_VirtualUIConfig.Save();
}

As a final comment, it must be clarified that in order to save the profiles in the configuration, writing permission on that directory is required.
Have any questions? Contact us at [email protected] or leave a message on this same post.

Leave a comment

Privacy Preferences
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.