Accelerate Windows Remote Desktop - Network Deploy To Multiple PC's

Hi,

I’ve tested the fix (https://developer.nvidia.com/nvidia-opengl-rdp) which was just released and it has fixed the issues my staff have been experiencing while working from home with apps that require OpenGL.

I now need to deploy this to hundreds of PC’s to get everyone working but cannot get it to run remotely. Does anyone know if this is possible or break down what exactly the fix is doing? I assume it’s just changing registry settings or the likes since it is a 400kb exe file.

Any help would be much appreciated and thanks to the team for releasing this :)

Regards,

James

3 Likes

Hi,
are we allowed to deploy your exe to our customers?

Same request here. Looking for a silent / unattended way to run the .exe file, so we can deploy it to all the computers in the company.

Knowing the registry settings would be also a useful option.

Hope the nice developers at NVidia can help.

Kind regards.

2 Likes

We were able to get the exe to deploy silently via powershell. We copied the exe and the ps1 file to c:\temp and then the powershell script would ‘click’ the dialog buttons to move the install forward. I’ll see if I can post the ps1 file

I make zero guarentee of this code and take no responsibility for how it behaves in your environment…

Using a pretty common deployment system (PDQ Deploy from AdminArsenal) we had to invoke a PS instance, call the script in an elevated instance of PS.
h/t to Gordon Price over at Pragmatic Praxis for the help. Here’s the code we used:

param(
    [string]$path = 'C:\nvidiaopenglrdp.exe'
)

[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')

$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = $path
$processInfo.RedirectStandardError = $true
$processInfo.RedirectStandardOutput = $true
$processInfo.UseShellExecute = $false
$processInfo.Arguments = ""
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $processInfo
[void]$process.Start()

<#Add-Type @"
using System;
using System.Runtime.InteropServices;
public class SetForegroundWindow {
  [DllImport("user32.dll")]
  [return: MarshalAs(UnmanagedType.Bool)]
  public static extern bool SetForegroundWindow(IntPtr hWnd);
}
"@#>

#[SetForegroundWindow]::SetForegroundWindow($process.MainWindowHandle)

$definition = '
    [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
    [DllImport("user32.dll")] public static extern int SetForegroundWindow(IntPtr hwnd);
'
$showWindow = Add-Type -MemberDefinition:$definition -Name:WindowAPI -PassThru
[void]$showWindow::ShowWindowAsync($process.MainWindowHandle, 4)
[void]$showWindow::SetForegroundWindow($process.MainWindowHandle) 

Start-Sleep -m:100
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}')
Start-Sleep -m:100
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}')

$process.WaitForExit()
$process.ExitCode

Start-Sleep -s:10

Exit $process.ExitCode

Awesome thank you so much for your help. I will try and test this out. Much appreciated!