mirror of
https://github.com/kimmknight/remoteapptool.git
synced 2024-11-25 15:07:25 +00:00
133 lines
5.0 KiB
VB.net
133 lines
5.0 KiB
VB.net
Module RDP2MSI
|
|
|
|
Sub Main()
|
|
Dim cmdRdpPath = ""
|
|
Dim cmdSwitches = ""
|
|
|
|
LogText("RDP2MSI" & vbCrLf)
|
|
If My.Application.CommandLineArgs.Count = 0 Then
|
|
ShowUsage()
|
|
End
|
|
ElseIf My.Application.CommandLineArgs.Count = 1 Then
|
|
cmdRdpPath = My.Application.CommandLineArgs(0)
|
|
ElseIf My.Application.CommandLineArgs.Count = 2 Then
|
|
If My.Application.CommandLineArgs(0).StartsWith("/") Then
|
|
cmdSwitches = My.Application.CommandLineArgs(0)
|
|
cmdRdpPath = My.Application.CommandLineArgs(1)
|
|
Else
|
|
cmdSwitches = My.Application.CommandLineArgs(1)
|
|
cmdRdpPath = My.Application.CommandLineArgs(0)
|
|
End If
|
|
ElseIf My.Application.CommandLineArgs.Count > 2 Then
|
|
LogText("Error: Too many parameters provided.", True)
|
|
End If
|
|
|
|
Dim relCmdRdpPath = System.IO.Directory.GetCurrentDirectory & "\" & cmdRdpPath
|
|
If Not cmdRdpPath.Contains(":") Then cmdRdpPath = relCmdRdpPath
|
|
|
|
If Not My.Computer.FileSystem.FileExists(cmdRdpPath) Then LogText("Error: Unable to find RDP file: " & cmdRdpPath, True)
|
|
|
|
If Not cmdSwitches.ToUpper.Contains("D") Then
|
|
If Not cmdSwitches.ToUpper.Contains("S") Then
|
|
cmdSwitches += "DS"
|
|
End If
|
|
End If
|
|
|
|
|
|
PrepareRDP2MSI(cmdRdpPath, cmdSwitches.ToUpper)
|
|
End Sub
|
|
|
|
Sub ShowUsage()
|
|
LogText("Usage: rdp2msi.exe [/DSNATU] rdpfile.rdp")
|
|
LogText("")
|
|
LogText("Switches:")
|
|
LogText("")
|
|
LogText(" /D MSI will deploy desktop shortcut.")
|
|
LogText(" /S MSI will deploy shortcut in Start Menu > Programs > (AppName)")
|
|
LogText(" /N Requires /S. MSI will not create subfolder in Start Menu > Programs.")
|
|
LogText(" /A Generate upgrade code based on app name. By default, it is random.")
|
|
LogText(" /T Do not include the (remote) tag on deployed shortcuts.")
|
|
LogText(" /U MSI installs per-user. By default, MSI will install per-machine.")
|
|
LogText("")
|
|
LogText("If no switches are specified, /DS is implied.")
|
|
LogText("")
|
|
LogText("If an ICO file with the same name as the RDP file exists, it will be used.")
|
|
LogText("")
|
|
End Sub
|
|
|
|
Private Sub PrepareRDP2MSI(rdpFilePath As String, Optional cmdSwitches As String = "DS")
|
|
If Not My.Computer.FileSystem.FileExists(rdpFilePath) Then LogText("Error: Unable to find RDP file: " & rdpFilePath, True)
|
|
If Not rdpFilePath.ToLower.EndsWith(".rdp") Then LogText("Error: Input file must be an RDP file.", True)
|
|
|
|
Dim RDP As New RDP2MSIlib.RDP
|
|
RDP.rdpPath = rdpFilePath
|
|
|
|
If Not RDP.WixInstalled Then LogText("Error: WiX Toolset not found. If you have just installed it, please reboot and try again.", True)
|
|
|
|
LogText("RDP file: " & rdpFilePath)
|
|
Dim RemoteAppFullName = RDP.ReadRDPProperty("remoteapplicationname")
|
|
Dim RDPFullAddress = RDP.ReadRDPProperty("full address")
|
|
If RDPFullAddress = "" Then LogText("Error: RDP file does not contain a Remote Desktop Server address.", True)
|
|
If RemoteAppFullName = "" Then
|
|
'Full desktop connection
|
|
LogText("RDP file type: Full desktop session")
|
|
Else
|
|
'RemoteApp connection
|
|
LogText("RDP file type: RemoteApp")
|
|
LogText("App full name: " & RemoteAppFullName)
|
|
End If
|
|
LogText("Command line switches: " & cmdSwitches.ToUpper)
|
|
|
|
|
|
RDP.ShortcutInStart = cmdSwitches.Contains("S")
|
|
RDP.ShortcutOnDesktop = cmdSwitches.Contains("D")
|
|
RDP.ShortcutSubfolderInStart = Not cmdSwitches.Contains("N")
|
|
Dim ShortcutLocations As New List(Of String)
|
|
If RDP.ShortcutInStart Then
|
|
If RDP.ShortcutSubfolderInStart Then
|
|
ShortcutLocations.Add("Start menu (subfolder)")
|
|
Else
|
|
ShortcutLocations.Add("Start menu (top level)")
|
|
End If
|
|
End If
|
|
If RDP.ShortcutOnDesktop Then ShortcutLocations.Add("Desktop")
|
|
|
|
LogText("Shortcut locations: " & String.Join(", ", ShortcutLocations))
|
|
|
|
RDP.ProductUpgradeRandom = Not cmdSwitches.Contains("A")
|
|
LogText("MSI upgrade code: {" & RDP.ProductUpgradeCode & "}")
|
|
If cmdSwitches.Contains("T") Then RDP.ProductRemoteTag = ""
|
|
|
|
RDP.PerUser = cmdSwitches.Contains("U")
|
|
If RDP.PerUser Then
|
|
LogText("MSI install context: User")
|
|
Else
|
|
LogText("MSI install context: Machine")
|
|
End If
|
|
|
|
Dim ShortcutTag = "NONE"
|
|
If Not RDP.ProductRemoteTag = "" Then ShortcutTag = "(" & RDP.ProductRemoteTag & ")"
|
|
LogText("Shortcut tag: " & ShortcutTag)
|
|
|
|
LogText("")
|
|
LogText("Generating MSI...")
|
|
|
|
RDP.CreateMSI()
|
|
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
Private Sub LogText(TheText As String, Optional DoExit As Boolean = False)
|
|
Console.WriteLine(TheText)
|
|
If DoExit = True Then
|
|
'CleanupTempFiles()
|
|
End
|
|
End If
|
|
End Sub
|
|
|
|
End Module
|
|
|
|
|