Initial commit

This commit is contained in:
Kim 2019-09-29 22:45:23 +10:00
commit f1f7664b91
82 changed files with 53821 additions and 0 deletions

344
.gitignore vendored Normal file
View File

@ -0,0 +1,344 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/

2
RDP2MSI/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin/
obj/

6
RDP2MSI/App.config Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

View File

@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>false</MySubMain>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>2</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("RDP2MSI")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("RDP2MSI")>
<Assembly: AssemblyCopyright("Copyright © 2016")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("7fb6fac3-8581-47b9-89db-767a6d87b576")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

63
RDP2MSI/My Project/Resources.Designer.vb generated Normal file
View File

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RDP2MSI.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

73
RDP2MSI/My Project/Settings.Designer.vb generated Normal file
View File

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.RDP2MSI.My.MySettings
Get
Return Global.RDP2MSI.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with.
Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
<!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>

132
RDP2MSI/RDP2MSI.vb Normal file
View File

@ -0,0 +1,132 @@
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

125
RDP2MSI/RDP2MSI.vbproj Normal file
View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1001A958-40DB-4444-9CD7-09D1188072D1}</ProjectGuid>
<OutputType>Exe</OutputType>
<StartupObject>Sub Main</StartupObject>
<RootNamespace>RDP2MSI</RootNamespace>
<AssemblyName>RDP2MSI</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Console</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>RDP2MSI.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>RDP2MSI.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="RDP2MSI.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\RDP2MSILib\RDP2MSILib.vbproj">
<Project>{e1cb5f9c-230f-4967-8f19-335f8e4a4906}</Project>
<Name>RDP2MSILib</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

2
RDP2MSILib/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin/
obj/

View File

@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>false</MySubMain>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>1</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("RDP2MSIlib")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("RDP2MSIlib")>
<Assembly: AssemblyCopyright("Copyright © 2016")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("af9953ef-de9f-4f06-a876-91395e89bfd1")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RDP2MSIlib.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.RDP2MSIlib.My.MySettings
Get
Return Global.RDP2MSIlib.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

364
RDP2MSILib/RDP2MSILib.vb Normal file
View File

@ -0,0 +1,364 @@
Imports System.Reflection.Assembly
Public Class RDP
Private rdpFilePath As String
Public Property rdpPath As String
Get
Return rdpFilePath
End Get
Set(value As String)
rdpFilePath = value
ReadRDPfile()
End Set
End Property
Private ProductName As String ' Full remoteapp name as read from RDP file
Public FlatFileTypes As String = ""
Public PerUser As Boolean = False
Private ProductBaseFileName As String ' RDP filename minus the file extension
Public ProductPublisher As String
Public ProductVersion As String = "1.0.0.0"
Public ProductUpgradeRandom As Boolean = False
Public ProductRemoteTag As String = "remote"
Public ShortcutInStart As Boolean = True
Public ShortcutSubfolderInStart As Boolean = True
Public ShortcutOnDesktop As Boolean = True
Private rdpFileContents As String
Private hasIcon As Boolean
Private rdpInTemp As Boolean
Public Sub CreateMSI(Optional DestinationPath As String = "")
'Check for wix, exit if not available
If Not WixInstalled() Then Exit Sub
'Get RDP file parent folder path
Dim rdpParentFolder = My.Computer.FileSystem.GetParentPath(rdpFilePath)
'Get the RDP filename and filename minus extension
Dim rdpFileName = My.Computer.FileSystem.GetFileInfo(rdpFilePath).Name
ProductBaseFileName = System.IO.Path.GetFileNameWithoutExtension(rdpFileName)
'If DestinationPath not defined then set the path to the same as the rdp file
If DestinationPath = "" Then DestinationPath = rdpParentFolder & "\" & ProductBaseFileName & ".msi"
'Set iconpath (whether it exists or not)
Dim IconFilePath = rdpParentFolder & "\" & ProductBaseFileName & ".ico"
'Check for icon, set "HasIcon" to true if found
hasIcon = My.Computer.FileSystem.FileExists(IconFilePath)
'Get RemoteApp names (short and full) from RDP file contents
Dim RemoteAppFullName = ReadRDPProperty("remoteapplicationname")
Dim RemoteAppShortName = ReadRDPProperty("remoteapplicationprogram")
'Define wix temp file paths
Dim TempPath = Environment.GetEnvironmentVariable("TEMP")
Dim wxsPath = TempPath & "\" & ProductBaseFileName & ".wxs"
Dim wixobjPath = TempPath & "\" & ProductBaseFileName & ".wixobj"
Dim wixpdbPath = TempPath & "\" & ProductBaseFileName & ".wixpdb"
Dim msiPath = TempPath & "\" & ProductBaseFileName & ".msi"
Dim rdpTempPath = TempPath & "\" & ProductBaseFileName & ".rdp"
Dim icoTempPath = TempPath & "\" & ProductBaseFileName & ".ico"
'Define temp files to delete
Dim FilesToDelete As List(Of String) = New List(Of String)(New String() {wxsPath, wixobjPath, wixpdbPath})
'Check if rdp file is already in TEMP folder
If rdpParentFolder = TempPath Then rdpInTemp = True
'if RDP file not in temp, copy to temp
If Not rdpInTemp Then
My.Computer.FileSystem.CopyFile(rdpFilePath, rdpTempPath, True)
FilesToDelete.Add(rdpTempPath)
If hasIcon Then
My.Computer.FileSystem.CopyFile(IconFilePath, icoTempPath, True)
FilesToDelete.Add(icoTempPath)
End If
End If
'Save WXS file containing generated WXS string
My.Computer.FileSystem.WriteAllText(wxsPath, GenerateWXSString(), False)
Dim CandlePath = WixPath() & "\candle.exe "
Dim LightPath = WixPath() & "\light.exe "
'Run Candle.exe and Light.exe to process wxs file
Dim CandleExitCode = RunWait(CandlePath, "-out """ & wixobjPath & """ """ & wxsPath & """")
'If Not CandleExitCode = 0 Then Exit Sub
Dim LightExitCode = RunWait(LightPath, "-out """ & msiPath & """ """ & wixobjPath & """")
'If Not LightExitCode = 0 Then Exit Sub
'Move MSI file to destination and delete temp files
My.Computer.FileSystem.MoveFile(msiPath, DestinationPath, True)
DeleteFiles(FilesToDelete)
End Sub
Public Function WixInstalled() As Boolean
If WixPath() = "" Then
WixInstalled = False
Else
WixInstalled = True
End If
End Function
Private Function WixPath()
Dim searchExe = "\candle.exe"
WixPath = ""
If Not Environment.GetEnvironmentVariable("WIX") = "" Then
WixPath = Environment.GetEnvironmentVariable("WIX") & "bin"
ElseIf My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\wix\" & searchExe) Then
WixPath = My.Application.Info.DirectoryPath & "\wix"
ElseIf My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\wix\bin\" & searchExe) Then
WixPath = My.Application.Info.DirectoryPath & "\wix\bin"
End If
End Function
Private Sub DeleteFiles(FilesArray As List(Of String))
For Each dFile In FilesArray
If My.Computer.FileSystem.FileExists(dFile) Then My.Computer.FileSystem.DeleteFile(dFile)
Next
End Sub
Private Sub ReadRDPfile()
'Check if RDP file exists
If Not My.Computer.FileSystem.FileExists(rdpFilePath) Then Exit Sub
'Check that RDP file is an RDP file
If Not rdpFilePath.ToLower.EndsWith(".rdp") Then Exit Sub
'Read RDP file into variable
rdpFileContents = My.Computer.FileSystem.ReadAllText(rdpFilePath)
'Check RDP file contains a remoteapplicationname value
'If ReadRDPProperty("remoteapplicationname") = "" Then Exit Sub
'Check if RDP file contains a server address
If ReadRDPProperty("full address") = "" Then Exit Sub
'Read variables
ProductName = ReadRDPProperty("remoteapplicationname")
If ProductName = "" Then
ProductName = System.IO.Path.GetFileNameWithoutExtension(rdpFilePath)
End If
If ProductPublisher Is Nothing Then ProductPublisher = ProductName
End Sub
Public Function ProductUpgradeCode()
' random or generated - maybe allow caller to define?
Dim UpgradeCode As String
'Check if ProductUpgradeRandom is true, create a random productcode if so, otherwise generate it from the productname
If Not ProductUpgradeRandom Then
UpgradeCode = GenerateGUIDfromString(ProductName)
Else
Dim Rnd = New Random()
UpgradeCode = GenerateGUIDfromString(Rnd.Next)
End If
Return UpgradeCode
End Function
Public Function MakeProgID(AppName) As String
Dim rx As New System.Text.RegularExpressions.Regex("[^a-zA-Z0-9_]")
MakeProgID = rx.Replace(AppName, "_")
End Function
Private Function GenerateWXSString()
Dim Rnd = New Random()
If ProductPublisher = "" Then ProductPublisher = ProductName
Dim RegRoot = "HKLM"
If PerUser = True Then RegRoot = "HKCU"
Dim AppFilesGuid = GenerateGUIDfromString("AppFiles" & ProductUpgradeCode())
Dim AppStartShortcutsGuid = GenerateGUIDfromString("AppStartShortcuts" & ProductUpgradeCode())
Dim AppDeskShortcutsGuid = GenerateGUIDfromString("AppDeskShortcuts" & ProductUpgradeCode())
Dim ProgID As String = MakeProgID(ProductBaseFileName)
Dim wxsString = "<?xml version=""1.0""?>" & vbCrLf
wxsString += "<?define ProductVersion = """ & ProductVersion & """?>" & vbCrLf
wxsString += "<?define ProductUpgradeCode = """ & ProductUpgradeCode() & """?>" & vbCrLf
wxsString += "<?define AppFilesGuid = """ & AppFilesGuid & """?>" & vbCrLf
wxsString += "<?define AppStartShortcutsGuid = """ & AppStartShortcutsGuid & """?>" & vbCrLf
wxsString += "<?define AppDeskShortcutsGuid = """ & AppDeskShortcutsGuid & """?>" & vbCrLf
wxsString += "<?define ProductName = """ & ProductName & """?>" & vbCrLf
wxsString += "<?define ProductPublisher = """ & ProductPublisher & """?>" & vbCrLf
wxsString += "<?define ProductBaseFileName = """ & ProductBaseFileName & """?>" & vbCrLf
wxsString += "<?define RegRoot = """ & RegRoot & """?>" & vbCrLf
If Not FlatFileTypes = "" Then wxsString += "<?define ProductProgID = """ & ProgID & """?>" & vbCrLf
If Not ProductRemoteTag = "" Then ProductRemoteTag = " (" & ProductRemoteTag & ")"
wxsString += "<?define ProductRemoteTag = """ & ProductRemoteTag & """?>" & vbCrLf
wxsString += "<Wix xmlns=""http://schemas.microsoft.com/wix/2006/wi"">" & vbCrLf
wxsString += " <Product Id=""*"" UpgradeCode=""$(var.ProductUpgradeCode)"" " & vbCrLf
wxsString += " Name=""$(var.ProductName)$(var.ProductRemoteTag)"" Version=""$(var.ProductVersion)"" Manufacturer=""$(var.ProductPublisher)"" Language=""1033"">" & vbCrLf
wxsString += " <Package InstallerVersion=""200"" Compressed=""yes"" Comments=""Windows Installer Package"""
If Not PerUser Then
wxsString += " InstallScope=""perMachine"""
Else
wxsString += " InstallPrivileges=""limited"""
End If
wxsString += "/>" & vbCrLf
wxsString += " <Media Id=""1"" Cabinet=""rdp2msi.cab"" EmbedCab=""yes""/>" & vbCrLf
If Not PerUser Then wxsString += " <Property Id=""AllUSERS"" Value=""1""/>" & vbCrLf
wxsString += " <Upgrade Id=""$(var.ProductUpgradeCode)"">" & vbCrLf
wxsString += " <UpgradeVersion Minimum=""$(var.ProductVersion)"" OnlyDetect=""yes"" Property=""NEWERVERSIONDETECTED""/>" & vbCrLf
wxsString += " <UpgradeVersion Minimum=""0.0.0"" Maximum=""$(var.ProductVersion)"" IncludeMinimum=""yes"" IncludeMaximum=""no"" " & vbCrLf
wxsString += " Property=""OLDERVERSIONBEINGUPGRADED""/> " & vbCrLf
wxsString += " </Upgrade>" & vbCrLf
wxsString += " <Condition Message=""A newer version of this software is already installed."">NOT NEWERVERSIONDETECTED</Condition>" & vbCrLf
wxsString += " <Property Id=""MstscProperty"" Value=""mstsc.exe""/>" & vbCrLf
wxsString += " <Directory Id=""TARGETDIR"" Name=""SourceDir"">" & vbCrLf
If Not PerUser Then
wxsString += " <Directory Id=""ProgramFilesFolder"">" & vbCrLf
Else
wxsString += " <Directory Id=""LocalAppDataFolder"">" & vbCrLf
End If
wxsString += " <Directory Id=""INSTALLDIR"" Name=""RemotePackages"">" & vbCrLf
wxsString += " <Component Id=""ApplicationFiles"" Guid=""$(var.AppFilesGuid)"">" & vbCrLf
wxsString += " <File Id=""rdpFile1"" Source=""$(var.ProductBaseFileName).rdp""/>" & vbCrLf
If hasIcon Then wxsString += " <File Id=""rdpIcon1"" Source=""$(var.ProductBaseFileName).ico""/>" & vbCrLf
'# Begin filetype association code
If Not FlatFileTypes = "" Then
For Each FileType In FlatFileTypes.Replace(".", "").Split(",")
wxsString += " <File Id=""$(var.ProductProgID)." & FileType & ".ico"" Source=""$(var.ProductBaseFileName)." & FileType & ".ico"" />" & vbCrLf
wxsString += " <ProgId Id=""remote.$(var.ProductProgID)." & FileType & "file"" Description=""$(var.ProductName) " & FileType & " file"" Icon=""$(var.ProductProgID)." & FileType & ".ico"">" & vbCrLf
wxsString += " <Extension Id=""" & FileType & """ ContentType=""application/" & FileType & """>" & vbCrLf
wxsString += " <Verb Id=""open"" Command=""Open"" TargetProperty='MstscProperty' Argument='/REMOTEFILE:""%1"" ""[INSTALLDIR]$(var.ProductBaseFileName).rdp""' />" & vbCrLf
wxsString += " </Extension>" & vbCrLf
wxsString += " </ProgId>" & vbCrLf
'wxsString += " <RegistryValue Root=""$(var.RegRoot)"" Key=""SOFTWARE\Classes\remote.$(var.ProductProgID)." & FileType & "file"" Name=""FriendlyTypeName"" Value=""$(var.ProductName) " & FileType & " file"" Type=""string"" />"
Next
End If
'# End FTA code
wxsString += " </Component>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
If ShortcutInStart Then
wxsString += " <Directory Id=""ProgramMenuFolder"">" & vbCrLf
If ShortcutSubfolderInStart Then wxsString += " <Directory Id=""ProgramMenuSubfolder"" Name=""$(var.ProductName)$(var.ProductRemoteTag)"">" & vbCrLf
wxsString += " <Component Id=""ApplicationStartShortcuts"" Guid=""$(var.AppStartShortcutsGuid)"">" & vbCrLf
wxsString += " <Shortcut Id=""rdpStartShortcut1"" Name=""$(var.ProductName)$(var.ProductRemoteTag)"" Description=""$(var.ProductName)$(var.ProductRemoteTag)"" " & vbCrLf
wxsString += " Target=""[INSTALLDIR]$(var.ProductBaseFileName).rdp"" WorkingDirectory=""INSTALLDIR"""
If hasIcon Then
wxsString += " Icon=""rdpStartIcon.rdp"" IconIndex=""0"">" & vbCrLf
wxsString += " <Icon Id=""rdpStartIcon.rdp"" SourceFile=""$(var.ProductBaseFileName).ico"" />" & vbCrLf
wxsString += " </Shortcut>" & vbCrLf
Else
wxsString += "/>" & vbCrLf
End If
wxsString += " <RegistryValue Root=""$(var.RegRoot)"" Key=""Software\RDP2MSI\$(var.ProductName)"" " & vbCrLf
wxsString += " Name=""installed"" Type=""integer"" Value=""1"" KeyPath=""yes""/>" & vbCrLf
wxsString += " <RemoveFolder Id=""ProgramMenuSubfolder"" On=""uninstall""/>" & vbCrLf
wxsString += " </Component>" & vbCrLf
If ShortcutSubfolderInStart Then wxsString += " </Directory>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
End If
If ShortcutOnDesktop Then
wxsString += " <Directory Id=""DesktopFolder"">" & vbCrLf
wxsString += " <Component Id=""ApplicationDesktopShortcuts"" Guid=""$(var.AppDeskShortcutsGuid)"">" & vbCrLf
wxsString += " <Shortcut Id=""rdpDesktopShortcut1"" Name=""$(var.ProductName)$(var.ProductRemoteTag)"" Description=""$(var.ProductName)$(var.ProductRemoteTag)"" " & vbCrLf
wxsString += " Target=""[INSTALLDIR]$(var.ProductBaseFileName).rdp"" WorkingDirectory=""INSTALLDIR"""
If hasIcon Then
wxsString += " Icon=""rdpDeskIcon.rdp"" IconIndex=""0"">" & vbCrLf
wxsString += " <Icon Id=""rdpDeskIcon.rdp"" SourceFile=""$(var.ProductBaseFileName).ico"" />" & vbCrLf
wxsString += " </Shortcut>" & vbCrLf
Else
wxsString += "/>" & vbCrLf
End If
wxsString += " <RegistryValue Root=""$(var.RegRoot)"" Key=""Software\RDP2MSI\$(var.ProductName)"" " & vbCrLf
wxsString += " Name=""installed"" Type=""integer"" Value=""1"" KeyPath=""yes""/>" & vbCrLf
wxsString += " </Component>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
End If
wxsString += " </Directory>" & vbCrLf
wxsString += " <InstallExecuteSequence>" & vbCrLf
wxsString += " <RemoveExistingProducts After=""InstallValidate""/>" & vbCrLf
wxsString += " </InstallExecuteSequence>" & vbCrLf
wxsString += " "
wxsString += " <Feature Id=""DefaultFeature"" Level=""1"">" & vbCrLf
wxsString += " <ComponentRef Id=""ApplicationFiles""/>" & vbCrLf
If ShortcutInStart Then wxsString += " <ComponentRef Id=""ApplicationStartShortcuts""/>" & vbCrLf
If ShortcutOnDesktop Then wxsString += " <ComponentRef Id=""ApplicationDesktopShortcuts""/>" & vbCrLf
wxsString += " </Feature>" & vbCrLf
If hasIcon Then
wxsString += "<Icon Id=""rdpARPIcon.rdp"" SourceFile=""$(var.ProductBaseFileName).ico"" />" & vbCrLf
wxsString += "<Property Id=""ARPPRODUCTICON"" Value=""rdpARPIcon.rdp"" />" & vbCrLf
End If
wxsString += " </Product>" & vbCrLf
wxsString += "</Wix>" & vbCrLf
Return wxsString
End Function
Public Function ReadRDPProperty(rdpProperty As String) As String
Dim rdpFileLines = Split(rdpFileContents, vbLf)
Dim rdpValue = ""
For Each rdpLine In rdpFileLines
rdpLine = Replace(rdpLine, vbCr, "")
rdpLine = Replace(rdpLine, "|", "")
Dim rdpLineSplit = Split(rdpLine, ":", 3)
If rdpLineSplit(0) = rdpProperty Then
rdpValue = rdpLineSplit(2)
End If
Next
Return rdpValue
End Function
Private Function GenerateGUIDfromString(TheString As String)
Dim TheHash = getMD5Hash(TheString)
Dim MyGuid As Guid = New Guid(TheHash)
Return MyGuid.ToString
End Function
Private Function getMD5Hash(ByVal strToHash As String) As String
Dim md5Obj As New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash)
bytesToHash = md5Obj.ComputeHash(bytesToHash)
Dim strResult As String = ""
Dim b As Byte
For Each b In bytesToHash
strResult += b.ToString("x2")
Next
Return strResult
End Function
Private Function RunWait(App As String, Parameters As String) As Integer
Dim proc As New Process
proc.StartInfo.CreateNoWindow = True
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
proc.StartInfo.FileName = App
proc.StartInfo.Arguments = Parameters
proc.Start()
proc.WaitForExit()
Return proc.ExitCode
End Function
End Class

View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E1CB5F9C-230F-4967-8F19-335F8E4A4906}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>RDP2MSIlib</RootNamespace>
<AssemblyName>RDP2MSIlib</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Windows</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>RDP2MSIlib.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>RDP2MSIlib.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="RDP2MSILib.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

2
RDPFileLib/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin/
obj/

View File

@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>false</MySubMain>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>1</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("RDPFileLib")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("RDPFileLib")>
<Assembly: AssemblyCopyright("Copyright © 2016")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("7331d9d3-2740-46b3-b668-759fe76774f3")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RDPFileLib.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.RDPFileLib.My.MySettings
Get
Return Global.RDPFileLib.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@ -0,0 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles />
<Settings />
</SettingsFile>

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>RDPFileLib</RootNamespace>
<AssemblyName>RDPFileLib</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Windows</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>RDPFileLib.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>RDPFileLib.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="RDPFileLib.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

255
RDPFileLib/RDPFileLib.vb Normal file
View File

@ -0,0 +1,255 @@
Public Class RDPFile
Public administrative_session As Integer = 0
Public allow_desktop_composition As Integer = 0
Public allow_font_smoothing As Integer = 0
Public alternate_full_address As String = ""
Public alternate_shell As String = ""
Public audiocapturemode As Integer = 0
Public audiomode As Integer = 0
Public audioqualitymode As Integer = 0
Public authentication_level As Integer = 2
Public autoreconnect_max_retries As Integer = 20
Public autoreconnection_enabled As Integer = 1
Public bandwidthautodetect As Integer = 1
Public bitmapcachepersistenable As Integer = 1
Public bitmapcachesize As Integer = 1500
Public compression As Integer = 1
Public connect_to_console As Integer = 0
Public connection_type As Integer = 2
Public desktop_size_id As Integer = 0
Public desktopheight As Integer = 600
Public desktopwidth As Integer = 800
Public devicestoredirect As String = ""
Public disable_ctrl_alt_del As Integer = 1
Public disable_full_window_drag As Integer = 1
Public disable_menu_anims As Integer = 1
Public disable_themes As Integer = 0
Public disable_wallpaper As Integer = 1
Public disableconnectionsharing As Integer = 0
Public disableremoteappcapscheck As Integer = 0
Public displayconnectionbar As Integer = 1
Public domain As String = ""
Public drivestoredirect As String = ""
Public enablecredsspsupport As Integer = 1
Public enablesuperpan As Integer = 0
Public full_address As String = ""
Public gatewaycredentialssource As Integer = 4
Public gatewayhostname As String = ""
Public gatewayprofileusagemethod As Integer = 0
Public gatewayusagemethod As Integer = 4
Public keyboardhook As Integer = 2
Public negotiate_security_layer As Integer = 1
Public networkautodetect As Integer = 1
'Public password_51 As Binary
Public pinconnectionbar As Integer = 1
Public prompt_for_credentials As Integer = 0
Public prompt_for_credentials_on_client As Integer = 0
Public promptcredentialonce As Integer = 1
Public public_mode As Integer = 0
Public redirectclipboard As Integer = 1
Public redirectcomports As Integer = 0
Public redirectdirectx As Integer = 1
Public redirectdrives As Integer = 0
Public redirectposdevices As Integer = 0
Public redirectprinters As Integer = 1
Public redirectsmartcards As Integer = 1
Public remoteapplicationcmdline As String = ""
Public remoteapplicationexpandcmdline As Integer = 1
Public remoteapplicationexpandworkingdir As Integer = 0
Public remoteapplicationfile As String = ""
Public remoteapplicationfileextensions As String = ""
Public remoteapplicationicon As String = ""
Public remoteapplicationmode As Integer = 0
Public remoteapplicationname As String = ""
Public remoteapplicationprogram As String = ""
Public screen_mode_id As Integer = 2
Public server_port As Integer = 3389
Public session_bpp As Integer = 32
Public shell_working_directory As String = ""
Public smart_sizing As Integer = 0
Public span_monitors As Integer = 0
Public superpanaccelerationfactor As Integer = 1
Public usbdevicestoredirect As String = ""
Public use_multimon As Integer = 0
Public username As String = ""
Public videoplaybackmode As Integer = 1
Public winposstr As String = "0,3,0,0,800,600"
Public Sub SaveRDPfile(FilePath As String, Optional SaveDefaultSettings As Boolean = False)
My.Computer.FileSystem.WriteAllText(FilePath, GetRDPstring(SaveDefaultSettings), False)
End Sub
Public Function GetRDPstring(Optional SaveDefaultSettings As Boolean = False)
Dim RDPstring As String = ""
Dim DefaultRDP As New RDPFile
If SaveDefaultSettings Or Not DefaultRDP.administrative_session = administrative_session Then RDPstring += "administrative session" & ":" & administrative_session.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & administrative_session.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.allow_desktop_composition = allow_desktop_composition Then RDPstring += "allow desktop composition" & ":" & allow_desktop_composition.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & allow_desktop_composition.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.allow_font_smoothing = allow_font_smoothing Then RDPstring += "allow font smoothing" & ":" & allow_font_smoothing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & allow_font_smoothing.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.alternate_full_address = alternate_full_address Then RDPstring += "alternate full address" & ":" & alternate_full_address.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & alternate_full_address.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.alternate_shell = alternate_shell Then RDPstring += "alternate shell" & ":" & alternate_shell.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & alternate_shell.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.audiocapturemode = audiocapturemode Then RDPstring += "audiocapturemode" & ":" & audiocapturemode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audiocapturemode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.audiomode = audiomode Then RDPstring += "audiomode" & ":" & audiomode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audiomode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.audioqualitymode = audioqualitymode Then RDPstring += "audioqualitymode" & ":" & audioqualitymode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audioqualitymode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.authentication_level = authentication_level Then RDPstring += "authentication level" & ":" & authentication_level.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & authentication_level.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.autoreconnect_max_retries = autoreconnect_max_retries Then RDPstring += "autoreconnect max retries" & ":" & autoreconnect_max_retries.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & autoreconnect_max_retries.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.autoreconnection_enabled = autoreconnection_enabled Then RDPstring += "autoreconnection enabled" & ":" & autoreconnection_enabled.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & autoreconnection_enabled.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.bandwidthautodetect = bandwidthautodetect Then RDPstring += "bandwidthautodetect" & ":" & bandwidthautodetect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bandwidthautodetect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.bitmapcachepersistenable = bitmapcachepersistenable Then RDPstring += "bitmapcachepersistenable" & ":" & bitmapcachepersistenable.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bitmapcachepersistenable.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.bitmapcachesize = bitmapcachesize Then RDPstring += "bitmapcachesize" & ":" & bitmapcachesize.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bitmapcachesize.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.compression = compression Then RDPstring += "compression" & ":" & compression.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & compression.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.connect_to_console = connect_to_console Then RDPstring += "connect to console" & ":" & connect_to_console.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & connect_to_console.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.connection_type = connection_type Then RDPstring += "connection type" & ":" & connection_type.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & connection_type.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.desktop_size_id = desktop_size_id Then RDPstring += "desktop size id" & ":" & desktop_size_id.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktop_size_id.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.desktopheight = desktopheight Then RDPstring += "desktopheight" & ":" & desktopheight.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktopheight.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.desktopwidth = desktopwidth Then RDPstring += "desktopwidth" & ":" & desktopwidth.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktopwidth.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.devicestoredirect = devicestoredirect Then RDPstring += "devicestoredirect" & ":" & devicestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & devicestoredirect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_ctrl_alt_del = disable_ctrl_alt_del Then RDPstring += "disable ctrl+alt+del" & ":" & disable_ctrl_alt_del.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_ctrl_alt_del.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_full_window_drag = disable_full_window_drag Then RDPstring += "disable full window drag" & ":" & disable_full_window_drag.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_full_window_drag.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_menu_anims = disable_menu_anims Then RDPstring += "disable menu anims" & ":" & disable_menu_anims.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_menu_anims.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_themes = disable_themes Then RDPstring += "disable themes" & ":" & disable_themes.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_themes.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_wallpaper = disable_wallpaper Then RDPstring += "disable wallpaper" & ":" & disable_wallpaper.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_wallpaper.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disableconnectionsharing = disableconnectionsharing Then RDPstring += "disableconnectionsharing" & ":" & disableconnectionsharing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disableconnectionsharing.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disableremoteappcapscheck = disableremoteappcapscheck Then RDPstring += "disableremoteappcapscheck" & ":" & disableremoteappcapscheck.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disableremoteappcapscheck.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.displayconnectionbar = displayconnectionbar Then RDPstring += "displayconnectionbar" & ":" & displayconnectionbar.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & displayconnectionbar.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.domain = domain Then RDPstring += "domain" & ":" & domain.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & domain.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.drivestoredirect = drivestoredirect Then RDPstring += "drivestoredirect" & ":" & drivestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & drivestoredirect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.enablecredsspsupport = enablecredsspsupport Then RDPstring += "enablecredsspsupport" & ":" & enablecredsspsupport.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & enablecredsspsupport.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.enablesuperpan = enablesuperpan Then RDPstring += "enablesuperpan" & ":" & enablesuperpan.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & enablesuperpan.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.full_address = full_address Then RDPstring += "full address" & ":" & full_address.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & full_address.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewaycredentialssource = gatewaycredentialssource Then RDPstring += "gatewaycredentialssource" & ":" & gatewaycredentialssource.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewaycredentialssource.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewayhostname = gatewayhostname Then RDPstring += "gatewayhostname" & ":" & gatewayhostname.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayhostname.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewayprofileusagemethod = gatewayprofileusagemethod Then RDPstring += "gatewayprofileusagemethod" & ":" & gatewayprofileusagemethod.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayprofileusagemethod.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewayusagemethod = gatewayusagemethod Then RDPstring += "gatewayusagemethod" & ":" & gatewayusagemethod.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayusagemethod.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.keyboardhook = keyboardhook Then RDPstring += "keyboardhook" & ":" & keyboardhook.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & keyboardhook.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.negotiate_security_layer = negotiate_security_layer Then RDPstring += "negotiate security layer" & ":" & negotiate_security_layer.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & negotiate_security_layer.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.networkautodetect = networkautodetect Then RDPstring += "networkautodetect" & ":" & networkautodetect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & networkautodetect.ToString & vbCrLf
'If SaveDefaultSettings Or Not DefaultRDP.password_51 = password_51 Then RDPstring += "password 51" & ":" & password_51.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & password_51.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.pinconnectionbar = pinconnectionbar Then RDPstring += "pinconnectionbar" & ":" & pinconnectionbar.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & pinconnectionbar.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.prompt_for_credentials = prompt_for_credentials Then RDPstring += "prompt for credentials" & ":" & prompt_for_credentials.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & prompt_for_credentials.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.prompt_for_credentials_on_client = prompt_for_credentials_on_client Then RDPstring += "prompt for credentials on client" & ":" & prompt_for_credentials_on_client.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & prompt_for_credentials_on_client.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.promptcredentialonce = promptcredentialonce Then RDPstring += "promptcredentialonce" & ":" & promptcredentialonce.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & promptcredentialonce.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.public_mode = public_mode Then RDPstring += "public mode" & ":" & public_mode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & public_mode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectclipboard = redirectclipboard Then RDPstring += "redirectclipboard" & ":" & redirectclipboard.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectclipboard.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectcomports = redirectcomports Then RDPstring += "redirectcomports" & ":" & redirectcomports.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectcomports.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectdirectx = redirectdirectx Then RDPstring += "redirectdirectx" & ":" & redirectdirectx.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectdirectx.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectdrives = redirectdrives Then RDPstring += "redirectdrives" & ":" & redirectdrives.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectdrives.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectposdevices = redirectposdevices Then RDPstring += "redirectposdevices" & ":" & redirectposdevices.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectposdevices.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectprinters = redirectprinters Then RDPstring += "redirectprinters" & ":" & redirectprinters.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectprinters.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectsmartcards = redirectsmartcards Then RDPstring += "redirectsmartcards" & ":" & redirectsmartcards.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectsmartcards.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationcmdline = remoteapplicationcmdline Then RDPstring += "remoteapplicationcmdline" & ":" & remoteapplicationcmdline.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationcmdline.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationexpandcmdline = remoteapplicationexpandcmdline Then RDPstring += "remoteapplicationexpandcmdline" & ":" & remoteapplicationexpandcmdline.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationexpandcmdline.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationexpandworkingdir = remoteapplicationexpandworkingdir Then RDPstring += "remoteapplicationexpandworkingdir" & ":" & remoteapplicationexpandworkingdir.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationexpandworkingdir.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationfile = remoteapplicationfile Then RDPstring += "remoteapplicationfile" & ":" & remoteapplicationfile.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationfile.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationfileextensions = remoteapplicationfileextensions Then RDPstring += "remoteapplicationfileextensions" & ":" & remoteapplicationfileextensions.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationfileextensions.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationicon = remoteapplicationicon Then RDPstring += "remoteapplicationicon" & ":" & remoteapplicationicon.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationicon.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationmode = remoteapplicationmode Then RDPstring += "remoteapplicationmode" & ":" & remoteapplicationmode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationmode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationname = remoteapplicationname Then RDPstring += "remoteapplicationname" & ":" & remoteapplicationname.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationname.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationprogram = remoteapplicationprogram Then RDPstring += "remoteapplicationprogram" & ":" & remoteapplicationprogram.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationprogram.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.screen_mode_id = screen_mode_id Then RDPstring += "screen mode id" & ":" & screen_mode_id.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & screen_mode_id.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.server_port = server_port Then RDPstring += "server port" & ":" & server_port.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & server_port.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.session_bpp = session_bpp Then RDPstring += "session bpp" & ":" & session_bpp.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & session_bpp.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.shell_working_directory = shell_working_directory Then RDPstring += "shell working directory" & ":" & shell_working_directory.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & shell_working_directory.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.smart_sizing = smart_sizing Then RDPstring += "smart sizing" & ":" & smart_sizing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & smart_sizing.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.span_monitors = span_monitors Then RDPstring += "span monitors" & ":" & span_monitors.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & span_monitors.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.superpanaccelerationfactor = superpanaccelerationfactor Then RDPstring += "superpanaccelerationfactor" & ":" & superpanaccelerationfactor.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & superpanaccelerationfactor.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.usbdevicestoredirect = usbdevicestoredirect Then RDPstring += "usbdevicestoredirect" & ":" & usbdevicestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & usbdevicestoredirect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.use_multimon = use_multimon Then RDPstring += "use multimon" & ":" & use_multimon.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & use_multimon.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.username = username Then RDPstring += "username" & ":" & username.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & username.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.videoplaybackmode = videoplaybackmode Then RDPstring += "videoplaybackmode" & ":" & videoplaybackmode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & videoplaybackmode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.winposstr = winposstr Then RDPstring += "winposstr" & ":" & winposstr.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & winposstr.ToString & vbCrLf
Return RDPstring
End Function
Public Sub LoadRDPfile(FilePath As String)
Dim sr As New System.IO.StreamReader(FilePath)
While (sr.Peek <> -1)
Dim line As String = sr.ReadLine
Dim SplitLine As Array = line.Split(":")
If Not SplitLine(2) = "" Then
If SplitLine(0) = "administrative session" Then administrative_session = SplitLine(2)
If SplitLine(0) = "allow desktop composition" Then allow_desktop_composition = SplitLine(2)
If SplitLine(0) = "allow font smoothing" Then allow_font_smoothing = SplitLine(2)
If SplitLine(0) = "alternate full address" Then alternate_full_address = SplitLine(2)
If SplitLine(0) = "alternate shell" Then alternate_shell = SplitLine(2)
If SplitLine(0) = "audiocapturemode" Then audiocapturemode = SplitLine(2)
If SplitLine(0) = "audiomode" Then audiomode = SplitLine(2)
If SplitLine(0) = "audioqualitymode" Then audioqualitymode = SplitLine(2)
If SplitLine(0) = "authentication level" Then authentication_level = SplitLine(2)
If SplitLine(0) = "autoreconnect max retries" Then autoreconnect_max_retries = SplitLine(2)
If SplitLine(0) = "autoreconnection enabled" Then autoreconnection_enabled = SplitLine(2)
If SplitLine(0) = "bandwidthautodetect" Then bandwidthautodetect = SplitLine(2)
If SplitLine(0) = "bitmapcachepersistenable" Then bitmapcachepersistenable = SplitLine(2)
If SplitLine(0) = "bitmapcachesize" Then bitmapcachesize = SplitLine(2)
If SplitLine(0) = "compression" Then compression = SplitLine(2)
If SplitLine(0) = "connect to console" Then connect_to_console = SplitLine(2)
If SplitLine(0) = "connection type" Then connection_type = SplitLine(2)
If SplitLine(0) = "desktop size id" Then desktop_size_id = SplitLine(2)
If SplitLine(0) = "desktopheight" Then desktopheight = SplitLine(2)
If SplitLine(0) = "desktopwidth" Then desktopwidth = SplitLine(2)
If SplitLine(0) = "devicestoredirect" Then devicestoredirect = SplitLine(2)
If SplitLine(0) = "disable ctrl+alt+del" Then disable_ctrl_alt_del = SplitLine(2)
If SplitLine(0) = "disable full window drag" Then disable_full_window_drag = SplitLine(2)
If SplitLine(0) = "disable menu anims" Then disable_menu_anims = SplitLine(2)
If SplitLine(0) = "disable themes" Then disable_themes = SplitLine(2)
If SplitLine(0) = "disable wallpaper" Then disable_wallpaper = SplitLine(2)
If SplitLine(0) = "disableconnectionsharing" Then disableconnectionsharing = SplitLine(2)
If SplitLine(0) = "disableremoteappcapscheck" Then disableremoteappcapscheck = SplitLine(2)
If SplitLine(0) = "displayconnectionbar" Then displayconnectionbar = SplitLine(2)
If SplitLine(0) = "domain" Then domain = SplitLine(2)
If SplitLine(0) = "drivestoredirect" Then drivestoredirect = SplitLine(2)
If SplitLine(0) = "enablecredsspsupport" Then enablecredsspsupport = SplitLine(2)
If SplitLine(0) = "enablesuperpan" Then enablesuperpan = SplitLine(2)
If SplitLine(0) = "full address" Then full_address = SplitLine(2)
If SplitLine(0) = "gatewaycredentialssource" Then gatewaycredentialssource = SplitLine(2)
If SplitLine(0) = "gatewayhostname" Then gatewayhostname = SplitLine(2)
If SplitLine(0) = "gatewayprofileusagemethod" Then gatewayprofileusagemethod = SplitLine(2)
If SplitLine(0) = "gatewayusagemethod" Then gatewayusagemethod = SplitLine(2)
If SplitLine(0) = "keyboardhook" Then keyboardhook = SplitLine(2)
If SplitLine(0) = "negotiate security layer" Then negotiate_security_layer = SplitLine(2)
If SplitLine(0) = "networkautodetect" Then networkautodetect = SplitLine(2)
'If SplitLine(0) = "password 51" Then password_51 = SplitLine(2)
If SplitLine(0) = "pinconnectionbar" Then pinconnectionbar = SplitLine(2)
If SplitLine(0) = "prompt for credentials" Then prompt_for_credentials = SplitLine(2)
If SplitLine(0) = "prompt for credentials on client" Then prompt_for_credentials_on_client = SplitLine(2)
If SplitLine(0) = "promptcredentialonce" Then promptcredentialonce = SplitLine(2)
If SplitLine(0) = "public mode" Then public_mode = SplitLine(2)
If SplitLine(0) = "redirectclipboard" Then redirectclipboard = SplitLine(2)
If SplitLine(0) = "redirectcomports" Then redirectcomports = SplitLine(2)
If SplitLine(0) = "redirectdirectx" Then redirectdirectx = SplitLine(2)
If SplitLine(0) = "redirectdrives" Then redirectdrives = SplitLine(2)
If SplitLine(0) = "redirectposdevices" Then redirectposdevices = SplitLine(2)
If SplitLine(0) = "redirectprinters" Then redirectprinters = SplitLine(2)
If SplitLine(0) = "redirectsmartcards" Then redirectsmartcards = SplitLine(2)
If SplitLine(0) = "remoteapplicationcmdline" Then remoteapplicationcmdline = SplitLine(2)
If SplitLine(0) = "remoteapplicationexpandcmdline" Then remoteapplicationexpandcmdline = SplitLine(2)
If SplitLine(0) = "remoteapplicationexpandworkingdir" Then remoteapplicationexpandworkingdir = SplitLine(2)
If SplitLine(0) = "remoteapplicationfile" Then remoteapplicationfile = SplitLine(2)
If SplitLine(0) = "remoteapplicationfileextensions" Then remoteapplicationfileextensions = SplitLine(2)
If SplitLine(0) = "remoteapplicationicon" Then remoteapplicationicon = SplitLine(2)
If SplitLine(0) = "remoteapplicationmode" Then remoteapplicationmode = SplitLine(2)
If SplitLine(0) = "remoteapplicationname" Then remoteapplicationname = SplitLine(2)
If SplitLine(0) = "remoteapplicationprogram" Then remoteapplicationprogram = SplitLine(2)
If SplitLine(0) = "screen mode id" Then screen_mode_id = SplitLine(2)
If SplitLine(0) = "server port" Then server_port = SplitLine(2)
If SplitLine(0) = "session bpp" Then session_bpp = SplitLine(2)
If SplitLine(0) = "shell working directory" Then shell_working_directory = SplitLine(2)
If SplitLine(0) = "smart sizing" Then smart_sizing = SplitLine(2)
If SplitLine(0) = "span monitors" Then span_monitors = SplitLine(2)
If SplitLine(0) = "superpanaccelerationfactor" Then superpanaccelerationfactor = SplitLine(2)
If SplitLine(0) = "usbdevicestoredirect" Then usbdevicestoredirect = SplitLine(2)
If SplitLine(0) = "use multimon" Then use_multimon = SplitLine(2)
If SplitLine(0) = "username" Then username = SplitLine(2)
If SplitLine(0) = "videoplaybackmode" Then videoplaybackmode = SplitLine(2)
If SplitLine(0) = "winposstr" Then winposstr = SplitLine(2)
End If
End While
End Sub
End Class

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>RDPFileLib</RootNamespace>
<AssemblyName>RDPFileLib</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Windows</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>RDPFileLib.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>RDPFileLib.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="RDPFileLib.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

27
RDPFileLib/app.config Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
</configuration>

2
remoteapp-tool/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin/
obj/

72
remoteapp-tool/App.config Normal file
View File

@ -0,0 +1,72 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="RemoteApp_Tool.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<userSettings>
<RemoteApp_Tool.My.MySettings>
<setting name="MainWindowWidth" serializeAs="String">
<value>0</value>
</setting>
<setting name="MainWindowHeight" serializeAs="String">
<value>0</value>
</setting>
<setting name="SavedConnectionModeMSI" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedOpenWithNotepad" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedServerAddress" serializeAs="String">
<value />
</setting>
<setting name="SavedServerPort" serializeAs="String">
<value>3389</value>
</setting>
<setting name="SavedAltServerAddress" serializeAs="String">
<value />
</setting>
<setting name="SavedUseRDGateway" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedRDGatewayAddress" serializeAs="String">
<value />
</setting>
<setting name="SavedAttemptDirectRDGateway" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedMSIShortcutDesktop" serializeAs="String">
<value>True</value>
</setting>
<setting name="SavedMSIShortcutStart" serializeAs="String">
<value>True</value>
</setting>
<setting name="SavedMSIShortcutStartTopLevel" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedUseShortcutTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="SavedShortcutTag" serializeAs="String">
<value>remote</value>
</setting>
<setting name="SavedClientConnectionOptions" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedCreateRAWebIcon" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedMSIPerUser" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedDisableFTA" serializeAs="String">
<value>False</value>
</setting>
</RemoteApp_Tool.My.MySettings>
</userSettings>
</configuration>

View File

@ -0,0 +1 @@


View File

@ -0,0 +1,102 @@
Module HelpSystem
Public Sub SetupTips(TheForm As Windows.Forms.Form)
Dim toolTip1 As New ToolTip()
toolTip1.AutoPopDelay = 10000
toolTip1.InitialDelay = 500
toolTip1.ReshowDelay = 500
Dim HelpString As String = ""
For Each Control As Control In TheForm.Controls
For Each SubControl As Control In Control.Controls
For Each SubSubControl In SubControl.Controls
For Each SubSubSubControl In SubSubControl.Controls
HelpString = GetTipString(Control.Parent.Name, SubSubSubControl.Name)
If Not HelpString = "" Then toolTip1.SetToolTip(SubSubSubControl, HelpString)
Next
HelpString = GetTipString(Control.Parent.Name, SubSubControl.Name)
If Not HelpString = "" Then toolTip1.SetToolTip(SubSubControl, HelpString)
Next
HelpString = GetTipString(Control.Parent.Name, SubControl.Name)
If Not HelpString = "" Then toolTip1.SetToolTip(SubControl, HelpString)
Next
HelpString = GetTipString(Control.Parent.Name, Control.Name)
If Not HelpString = "" Then toolTip1.SetToolTip(Control, HelpString)
Next
End Sub
Private Function GetTipString(FormName As String, ControlName As String) As String
Dim TipString As String = ""
Dim TipText As String = GetTipFile()
Dim TipArray = TipText.Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
For Each TipLine As String In TipArray
Dim TipLineArray = TipLine.Split("|")
If TipLineArray(0) = FormName And TipLineArray(1) = ControlName Then TipString = TipLineArray(2)
Next
TipString = TipString.Replace("\r", vbCr)
TipString = TipString.Replace("\n", vbLf)
Return TipString
End Function
Private Function GetTipFile() As String
Dim TipFile As String = ""
If My.Computer.FileSystem.FileExists("tips.txt") Then
TipFile = My.Computer.FileSystem.ReadAllText("tips.txt")
Else
TipFile = GetBuiltInTips()
End If
Return TipFile
End Function
Private Function GetBuiltInTips() As String
Dim Tips As String = ""
Tips += "RemoteAppMainWindow|CreateButton|Add a new RemoteApp." & vbCrLf
Tips += "RemoteAppMainWindow|DeleteButton|Remove selected RemoteApp." & vbCrLf
Tips += "RemoteAppMainWindow|EditButton|Edit properties of selected RemoteApp." & vbCrLf
Tips += "RemoteAppMainWindow|CreateClientConnection|Creates a RDP file or MSI installer for the selected RemoteApp." & vbCrLf
Tips += "RemoteAppEditWindow|SaveButton|Save changes and close." & vbCrLf
Tips += "RemoteAppEditWindow|FTAButton|Set file type associations for this RemoteApp." & vbCrLf
Tips += "RemoteAppEditWindow|CancelEditButton|Discard changes and close." & vbCrLf
Tips += "RemoteAppEditWindow|BrowseIconPath|Select an icon for the RemoteApp." & vbCrLf
Tips += "RemoteAppEditWindow|VPathCopyButton|Copy the value from the ""Path"" field into the ""VPath"" field." & vbCrLf
Tips += "RemoteAppEditWindow|IconPathCopyButton|Copy the value from the ""Path"" field into the ""Icon path"" field. " & vbCrLf
Tips += "RemoteAppEditWindow|BrowsePath|Browse for application." & vbCrLf
Tips += "RemoteAppEditWindow|BrowseVPath|Browse for application." & vbCrLf
Tips += "RemoteAppCreateClientConnection|RDPRadioButton|Create an RDP file." & vbCrLf
Tips += "RemoteAppCreateClientConnection|MSIRadioButton|Create an MSI file." & vbCrLf
Tips += "RemoteAppCreateClientConnection|EditAfterSave|Edit the RDP connection file." & vbCrLf
Tips += "RemoteAppCreateClientConnection|CreateRAWebIcon|Generate an icon for the application and any file type associations.\r\nUse this with RAWeb." & vbCrLf
Tips += "RemoteAppCreateClientConnection|FTAButton|Set file type associations for this RemoteApp.\r\nChanges here will only affect this client connection. They will not be saved." & vbCrLf
Tips += "RemoteAppCreateClientConnection|DisabledFTACheckBox|Do not include file type associations in this client connection." & vbCrLf
Tips += "RemoteAppCreateClientConnection|SaveButton|Save window settings for next time." & vbCrLf
Tips += "RemoteAppCreateClientConnection|ResetButton|Reset window settings to defaults." & vbCrLf
Tips += "RemoteAppCreateClientConnection|CancelEditButton|Close and return to the main window." & vbCrLf
Tips += "RemoteAppCreateClientConnection|CreateButton|Create the client connection and choose where to save it." & vbCrLf
Tips += "RemoteAppFileTypeAssociation|CreateButton|Create a new File Type Association." & vbCrLf
Tips += "RemoteAppFileTypeAssociation|DeleteButton|Delete selected File Type Association." & vbCrLf
Tips += "RemoteAppFileTypeAssociation|EditButton|Change icon of selected File Type Association." & vbCrLf
Tips += "RemoteAppFileTypeAssociation|SetAssociationButton|Create or remove the selected File Type Association on the current system." & vbCrLf
Tips += "RemoteAppFileTypeAssociation|CloseButton|Save changes and close." & vbCrLf
Tips += "RemoteAppIconPicker|BrowseButton|Browse for a file that contains icons." & vbCrLf
Tips += "RemoteAppIconPicker|CancelEditButton|Discard changes and close." & vbCrLf
Tips += "RemoteAppIconPicker|OKButton|Choose the selected icon." & vbCrLf
Return Tips
End Function
End Module

View File

@ -0,0 +1,155 @@
Imports System.IO
Imports System.Drawing
Imports System.Collections.Generic
Public Class IconExtractor
Private Declare Function ExtractIconEx _
Lib "shell32.dll" Alias "ExtractIconExA" _
(ByVal lpszFile As String, ByVal nIconIndex As Int32, _
ByRef phiconLarge As Int32, ByRef phiconSmall As Int32, _
ByVal nIcons As Int32) As Int32
Private Declare Function ExtractIcon _
Lib "shell32.dll" Alias "ExtractIconA" _
(ByVal hInst As IntPtr, ByVal lpszExeFileName As String, _
ByVal nIconIndex As Int32) As Int32
Private Declare Function DrawIconEx _
Lib "user32" _
(ByVal hdc As Int32, ByVal xLeft As Int32, ByVal yTop As Int32, _
ByVal hIcon As IntPtr, ByVal cxWidth As Int32, ByVal cyWidth As Int32, _
ByVal istepIfAniCur As Int32, ByVal hbrFlickerFreeDraw As Int32, _
ByVal diFlags As Int32) As Int32
Private Declare Function DestroyIcon _
Lib "user32" _
(ByVal hIcon As Int32) As Int32
Private m_hIcons() As Int32
Protected Overrides Sub Finalize()
MyBase.Finalize()
Dim countIcons As Integer = m_hIcons.Length
If countIcons > 0 Then
For iconIndex As Integer = 0 To countIcons - 1
DestroyIcon(m_hIcons(iconIndex))
Next iconIndex
End If
End Sub
Public Function ExtractIcons(ByVal filePath As String, ByVal hInst As IntPtr) As List(Of Icon)
Dim listIcons As New List(Of Icon)
Try
Dim numIcons As Integer = ExtractIconEx(filePath, -1, 0&, 0&, 0&)
If numIcons = 0 Then
Throw New Exception("No icons found in " & filePath)
End If
numIcons -= 1
For currentIcon As Integer = 0 To numIcons
m_hIcons(currentIcon) = ExtractIcon(hInst, filePath, currentIcon)
Dim handleIcon As New IntPtr(m_hIcons(currentIcon))
If Not handleIcon.Equals(IntPtr.Zero) Then
listIcons.Add(Icon.FromHandle(handleIcon))
End If
Next currentIcon
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
Return listIcons
End Function
End Class
Module IconModule
Public Sub TestIconLib()
Dim testIcon As New IconLib.MultiIcon
End Sub
Public Function IconFromFilePath(filePath As String) As Icon
Dim result As Icon = Nothing
Try
result = Icon.ExtractAssociatedIcon(filePath)
Catch
End Try
Return result
End Function
Public Function ExtractToIco(IconSourcePath As String, IconSourceIndex As Integer, IcoDestPath As String) As Boolean
Dim success = False
Dim IconLoadError As Boolean = False
If My.Computer.FileSystem.FileExists(IconSourcePath) = True Then
Dim mIcon As New IconLib.MultiIcon
Try
mIcon.Load(IconSourcePath)
Catch Ex As Exception
IconLoadError = True
End Try
If Not IconLoadError Then
Dim sIcon As IconLib.SingleIcon
If IconSourceIndex = 0 Then
sIcon = mIcon.FirstOrDefault
Else
sIcon = mIcon.Item(IconSourceIndex)
End If
Try
sIcon.Save(IcoDestPath)
success = True
Catch Ex As Exception
End Try
End If
End If
Return success
End Function
Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Integer, ByRef phiconLarge As Integer, ByRef phiconSmall As Integer, ByVal nIcons As Integer) As Integer
Public Function ReturnIcon(ByVal Path As String, ByVal Index As Integer, Optional ByVal small As Boolean = False) As Icon
Dim bigIcon As Integer
Dim smallIcon As Integer
ExtractIcon(Path, Index, bigIcon, smallIcon, 1)
If bigIcon = 0 Then
ExtractIcon(Path, 0, bigIcon, smallIcon, 1)
End If
If bigIcon <> 0 Then
If small = False Then
Return Icon.FromHandle(bigIcon)
Else
Return Icon.FromHandle(smallIcon)
End If
Else
Return ReturnIcon(GetSysDir() & "\mstsc.exe", 0)
End If
End Function
End Module

View File

@ -0,0 +1,131 @@
Imports RemoteAppLib
Module LocalFtaModule
Public Sub RemoveUnusedFTAs()
Dim KeyNames = My.Computer.Registry.ClassesRoot().GetSubKeyNames
Dim RemoveCount As Integer = 0
For Each KeyName In KeyNames
Dim FTAkey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(KeyName)
Dim RAvalue As String = FTAkey.GetValue("RemoteApp", "")
If Not RAvalue = "" Then
For Each KeyName2 In KeyNames
Try
Dim FTkey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(KeyName2)
Dim FTvalue As String = FTkey.GetValue("", "")
If FTvalue = KeyName Then
Dim sra As New RemoteAppLib.SystemRemoteApps
Dim AppExists As Boolean = False
For Each app As RemoteAppLib.RemoteApp In sra.GetAll
If app.Name = GetAppForFTA(KeyName2) Then AppExists = True
Next
If Not AppExists Then
LocalFtaModule.DeleteFTA(KeyName2)
RemoveCount += 1
End If
End If
Catch ex As Exception
End Try
Next
End If
Next
MessageBox.Show("Unused file type associations removed: " & RemoveCount, "File Type Association", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Public Function CreateFTACollection(ftaCol As FileTypeAssociationCollection, exeFile As String, RemoteAppName As String, Optional overwrite As Boolean = False) As String
CreateFTACollection = ""
For Each fta As FileTypeAssociation In ftaCol
If DoesFTAExist(fta.Extension) And CreateFTA(fta, exeFile, RemoteAppName, overwrite) = False Then
CreateFTACollection += "|" & fta.Extension
End If
Next
CreateFTACollection = CreateFTACollection.Trim("|")
End Function
Public Function CreateFTA(fta As FileTypeAssociation, exeFile As String, RemoteAppName As String, Optional overwrite As Boolean = False) As Boolean
If DoesFTAExist(fta.Extension) = False Or overwrite = True Then
DeleteFTA(fta.Extension)
Dim FileTypeReg = My.Computer.Registry.ClassesRoot.CreateSubKey("." & fta.Extension)
FileTypeReg.SetValue("", fta.Extension & "_file")
Dim FileTypeKey = My.Computer.Registry.ClassesRoot.CreateSubKey(fta.Extension & "_file")
FileTypeKey.SetValue("RemoteApp", RemoteAppName)
Dim FileTypeKeyShell = FileTypeKey.CreateSubKey("shell")
Dim FileTypeKeyShellOpen = FileTypeKeyShell.CreateSubKey("open")
Dim FileTypeKeyShellOpenCommand = FileTypeKeyShellOpen.CreateSubKey("command")
FileTypeKeyShellOpenCommand.SetValue("", """" & exeFile & """ ""%1""")
Dim FileTypeKeyDefIcon = FileTypeKey.CreateSubKey("DefaultIcon")
FileTypeKeyDefIcon.SetValue("", """" & fta.IconPath & """," & fta.IconIndex)
CreateFTA = True
Else
CreateFTA = False
End If
End Function
Public Function GetAppForFTA(fileExtension As String) As String
fileExtension = fileExtension.TrimStart(".")
GetAppForFTA = ""
If DoesFTAExist(fileExtension) And IsFTAMine(fileExtension) Then
Try
Dim HKCRext As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot().OpenSubKey("." & fileExtension)
Dim HKCRfta = HKCRext.GetValue("", "")
If Not HKCRfta = "" Then
Dim HKCRftaKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot().OpenSubKey(HKCRfta)
GetAppForFTA = HKCRftaKey.GetValue("RemoteApp", "")
End If
Catch ex As Exception
End Try
End If
End Function
Public Sub DeleteFTA(fileExtension As String)
fileExtension = fileExtension.TrimStart(".")
If Not My.Computer.Registry.ClassesRoot.OpenSubKey("." & fileExtension) Is Nothing Then _
My.Computer.Registry.ClassesRoot.DeleteSubKeyTree("." & fileExtension)
If Not My.Computer.Registry.ClassesRoot.OpenSubKey(fileExtension & "_file") Is Nothing Then _
My.Computer.Registry.ClassesRoot.DeleteSubKeyTree(fileExtension & "_file")
End Sub
Public Function DoesFTAExist(fileExtension As String) As Boolean
fileExtension = fileExtension.TrimStart(".")
Dim FTAexists As Boolean = False
Dim HKCRext As String = ""
Try
HKCRext = My.Computer.Registry.ClassesRoot().OpenSubKey("." & fileExtension).ToString
FTAexists = True
Catch ex As Exception
End Try
Return FTAexists
End Function
Public Function IsFTAMine(fileExtension As String) As Boolean
fileExtension = fileExtension.TrimStart(".")
IsFTAMine = False
Try
Dim HKCRext As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot().OpenSubKey("." & fileExtension)
Dim HKCRfta = HKCRext.GetValue("", "")
If Not HKCRfta = "" Then
Dim HKCRftaKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot().OpenSubKey(HKCRfta)
If Not HKCRftaKey.GetValue("RemoteApp", "") = "" Then IsFTAMine = True
End If
Catch ex As Exception
End Try
End Function
End Module

View File

@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = true
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.RemoteApp_Tool.RemoteAppMainWindow
End Sub
End Class
End Namespace

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>RemoteAppMainWindow</MainForm>
<SingleInstance>true</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("RemoteApp Tool")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Kim Knight")>
<Assembly: AssemblyProduct("RemoteApp Tool")>
<Assembly: AssemblyCopyright("Created by Kim Knight")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("fbd55db5-06ea-4e43-92a4-6e96893013cc")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("5.4.0.0")>
<Assembly: AssemblyFileVersion("5.4.0.0")>

View File

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RemoteApp_Tool.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</root>

View File

@ -0,0 +1,301 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property MainWindowWidth() As Long
Get
Return CType(Me("MainWindowWidth"),Long)
End Get
Set
Me("MainWindowWidth") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property MainWindowHeight() As Long
Get
Return CType(Me("MainWindowHeight"),Long)
End Get
Set
Me("MainWindowHeight") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedConnectionModeMSI() As Boolean
Get
Return CType(Me("SavedConnectionModeMSI"),Boolean)
End Get
Set
Me("SavedConnectionModeMSI") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedOpenWithNotepad() As Boolean
Get
Return CType(Me("SavedOpenWithNotepad"),Boolean)
End Get
Set
Me("SavedOpenWithNotepad") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property SavedServerAddress() As String
Get
Return CType(Me("SavedServerAddress"),String)
End Get
Set
Me("SavedServerAddress") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("3389")> _
Public Property SavedServerPort() As Integer
Get
Return CType(Me("SavedServerPort"),Integer)
End Get
Set
Me("SavedServerPort") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property SavedAltServerAddress() As String
Get
Return CType(Me("SavedAltServerAddress"),String)
End Get
Set
Me("SavedAltServerAddress") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedUseRDGateway() As Boolean
Get
Return CType(Me("SavedUseRDGateway"),Boolean)
End Get
Set
Me("SavedUseRDGateway") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property SavedRDGatewayAddress() As String
Get
Return CType(Me("SavedRDGatewayAddress"),String)
End Get
Set
Me("SavedRDGatewayAddress") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedAttemptDirectRDGateway() As Boolean
Get
Return CType(Me("SavedAttemptDirectRDGateway"),Boolean)
End Get
Set
Me("SavedAttemptDirectRDGateway") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Public Property SavedMSIShortcutDesktop() As Boolean
Get
Return CType(Me("SavedMSIShortcutDesktop"),Boolean)
End Get
Set
Me("SavedMSIShortcutDesktop") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Public Property SavedMSIShortcutStart() As Boolean
Get
Return CType(Me("SavedMSIShortcutStart"),Boolean)
End Get
Set
Me("SavedMSIShortcutStart") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedMSIShortcutStartTopLevel() As Boolean
Get
Return CType(Me("SavedMSIShortcutStartTopLevel"),Boolean)
End Get
Set
Me("SavedMSIShortcutStartTopLevel") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Public Property SavedUseShortcutTag() As Boolean
Get
Return CType(Me("SavedUseShortcutTag"),Boolean)
End Get
Set
Me("SavedUseShortcutTag") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("remote")> _
Public Property SavedShortcutTag() As String
Get
Return CType(Me("SavedShortcutTag"),String)
End Get
Set
Me("SavedShortcutTag") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedClientConnectionOptions() As Boolean
Get
Return CType(Me("SavedClientConnectionOptions"),Boolean)
End Get
Set
Me("SavedClientConnectionOptions") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedCreateRAWebIcon() As Boolean
Get
Return CType(Me("SavedCreateRAWebIcon"),Boolean)
End Get
Set
Me("SavedCreateRAWebIcon") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedMSIPerUser() As Boolean
Get
Return CType(Me("SavedMSIPerUser"),Boolean)
End Get
Set
Me("SavedMSIPerUser") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedDisableFTA() As Boolean
Get
Return CType(Me("SavedDisableFTA"),Boolean)
End Get
Set
Me("SavedDisableFTA") = value
End Set
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.RemoteApp_Tool.My.MySettings
Get
Return Global.RemoteApp_Tool.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@ -0,0 +1,63 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="MainWindowWidth" Type="System.Int64" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="MainWindowHeight" Type="System.Int64" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="SavedConnectionModeMSI" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedOpenWithNotepad" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedServerAddress" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="SavedServerPort" Type="System.Int32" Scope="User">
<Value Profile="(Default)">3389</Value>
</Setting>
<Setting Name="SavedAltServerAddress" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="SavedUseRDGateway" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedRDGatewayAddress" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="SavedAttemptDirectRDGateway" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedMSIShortcutDesktop" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="SavedMSIShortcutStart" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="SavedMSIShortcutStartTopLevel" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedUseShortcutTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="SavedShortcutTag" Type="System.String" Scope="User">
<Value Profile="(Default)">remote</Value>
</Setting>
<Setting Name="SavedClientConnectionOptions" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedCreateRAWebIcon" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedMSIPerUser" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedDisableFTA" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with.
Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
<!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>

View File

@ -0,0 +1,398 @@
Module RDP2MSImodule
Public wxsPath
Public wixobjPath
Public wixpdbPath
Public rdpFilePathD
Public Sub Main()
Dim cmdRdpPath = ""
Dim cmdSwitches = "DS"
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
If cmdSwitches.ToUpper.Contains("~") Then LogText("Command line options: " & cmdSwitches.ToUpper)
RDP2MSI(cmdRdpPath, cmdSwitches.ToUpper)
'Console.Write("Press any key to continue...")
'Console.ReadKey()
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
Public Sub RDP2MSI(rdpFilePath As String, Optional CmdParameters As String = "", Optional ShortcutTag As String = "", Optional AppPublisher As String = "", Optional FlatFileTypes As String = "", Optional PerUser As Boolean = False)
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)
If ReadRDPProperty(rdpFilePath, "remoteapplicationname") = "" Then LogText("Error: RDP file does not contain valid data.", True)
Dim rdpParentFolder = My.Computer.FileSystem.GetParentPath(rdpFilePath)
LogText("Working folder: " & rdpParentFolder)
LogText("RDP file: " & rdpFilePath)
Dim RemoteAppFullName = ReadRDPProperty(rdpFilePath, "remoteapplicationname")
LogText("App full name: " & RemoteAppFullName)
Dim RemoteAppShortName = ReadRDPProperty(rdpFilePath, "remoteapplicationprogram")
LogText("App short name: " & RemoteAppShortName)
Dim UpgradeCode
If CmdParameters.ToUpper.Contains("A") Then
UpgradeCode = GenerateGUIDfromString(RemoteAppShortName)
Else
Dim Rnd = New Random()
UpgradeCode = GenerateGUIDfromString(Rnd.Next)
End If
LogText("Upgrade code: " & UpgradeCode)
Dim IconFilePath = Left(rdpFilePath, rdpFilePath.Length - 4) & ".ico"
Dim HasIcon = False
If My.Computer.FileSystem.FileExists(IconFilePath) Then
HasIcon = True
LogText("Icon found: " & IconFilePath)
Else
LogText("Icon not found.")
End If
'Dim shortcutTag = ReadIni(My.Application.Info.DirectoryPath & "\rdp2msi.ini", "Settings", "ShortcutTag", "remote")
If CmdParameters.ToUpper.Contains("T") Then ShortcutTag = ""
'Dim appPublisher = ReadIni(My.Application.Info.DirectoryPath & "\rdp2msi.ini", "Settings", "AppPublisher", "")
Dim rdpFileName = My.Computer.FileSystem.GetFileInfo(rdpFilePath).Name
Dim ProductFileName = Left(rdpFileName, rdpFileName.Length - 4)
Dim wxsString = GenerateWXSString(ProductFileName, RemoteAppFullName, AppPublisher, HasIcon, , UpgradeCode, ShortcutTag, CmdParameters, FlatFileTypes, PerUser)
wxsPath = rdpParentFolder & "\" & ProductFileName & ".wxs"
wixobjPath = rdpParentFolder & "\" & ProductFileName & ".wixobj"
wixpdbPath = rdpParentFolder & "\" & ProductFileName & ".wixpdb"
Dim msiPath = rdpParentFolder & "\" & ProductFileName & ".msi"
Dim FilesToDelete As New ArrayList
FilesToDelete.Add(rdpFilePath)
FilesToDelete.Add(wxsPath)
FilesToDelete.Add(wixobjPath)
FilesToDelete.Add(wixpdbPath)
My.Computer.FileSystem.WriteAllText(wxsPath, wxsString, False)
Dim wixPath = FindWixPath()
If wixPath = "" Then
LogText("Error: Unable to locate the WiX Toolset. Exiting.", True)
Else
LogText("Found WiX Toolset in: " & wixPath)
End If
Dim CandlePath = wixPath & "\candle.exe "
Dim LightPath = wixPath & "\light.exe "
LogText("Invoking candle.exe from WiX Toolset")
Dim CandleExitCode = RunWait(CandlePath, "-out """ & wixobjPath & """ """ & wxsPath & """")
If CandleExitCode = 0 Then
LogText("candle.exe executed successfully.")
Else
LogText("Error: candle.exe returned an error.", True)
End If
LogText("Invoking light.exe from WiX Toolset")
Dim LightExitCode = RunWait(LightPath, " -out """ & msiPath & """ """ & wixobjPath & """")
If LightExitCode = 0 Then
LogText("light.exe executed successfully.")
Else
LogText("Error: light.exe returned an error.", True)
End If
If Not CmdParameters.Contains("~") Then
DeleteFiles(FilesToDelete)
End If
If My.Computer.FileSystem.FileExists(msiPath) Then
LogText(My.Computer.FileSystem.GetFileInfo(msiPath).Name & " created successfully.")
Else
LogText("Error: MSI creation failed.", True)
MsgBox("MSI creation failed.", MsgBoxStyle.Critical, "Error")
End If
End Sub
Sub CleanupTempFiles()
If My.Computer.FileSystem.FileExists(rdpFilePathD) Then My.Computer.FileSystem.DeleteFile(rdpFilePathD)
If My.Computer.FileSystem.FileExists(wxsPath) Then My.Computer.FileSystem.DeleteFile(wxsPath)
If My.Computer.FileSystem.FileExists(wixobjPath) Then My.Computer.FileSystem.DeleteFile(wixobjPath)
If My.Computer.FileSystem.FileExists(wixpdbPath) Then My.Computer.FileSystem.DeleteFile(wixpdbPath)
End Sub
Function FindWixPath()
LogText("Locating WiX Toolset")
Dim searchExe = "\candle.exe"
Dim wixPath = ""
Dim wixIniPath = ReadIni(My.Application.Info.DirectoryPath & "\rdp2msi.ini", "WIX", "binpath", My.Application.Info.DirectoryPath & "\wix").TrimEnd(Chr(92))
If My.Computer.FileSystem.FileExists(wixIniPath & searchExe) Then
wixPath = wixIniPath
ElseIf Environment.GetEnvironmentVariable("WIX") <> "" Then
wixPath = Environment.GetEnvironmentVariable("WIX") & "bin"
ElseIf My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\wix\" & searchExe) Then
wixPath = My.Application.Info.DirectoryPath & "\wix"
ElseIf My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\bin\" & searchExe) Then
wixPath = My.Application.Info.DirectoryPath & "\bin"
End If
Return wixPath
End Function
Sub ShowUsage()
LogText("Usage: rdp2msi.exe [/DSNAT] 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, otherwise it is random")
LogText(" /T Do not include the (remote) tag on deployed shortcuts")
LogText("")
LogText("If no switches are specified, /DS is implied.")
LogText("")
End Sub
Function GenerateWXSString(ProductFileName As String, ProductName As String, Optional ProductPublisher As String = "", Optional HasIcon As Boolean = False, Optional ProductVersion As String = "1.0.0.0", Optional ProductUpgradeCode As String = "random", Optional ProductRemoteTag As String = "remote", Optional ShortcutLocations As String = "DS", Optional FlatFileTypes As String = "", Optional PerUser As Boolean = False)
Dim Rnd = New Random()
If ProductUpgradeCode = "random" Then ProductUpgradeCode = GenerateGUIDfromString(Rnd.Next)
If ProductPublisher = "" Then ProductPublisher = ProductName
Dim RegRoot = "HKLM"
If PerUser = True Then RegRoot = "HKCU"
Dim FileTypes As New ArrayList
If Not FlatFileTypes = "" Then FileTypes.AddRange(Split(FlatFileTypes, "|"))
Dim AppFilesGuid = GenerateGUIDfromString("AppFiles" & ProductUpgradeCode)
Dim AppStartShortcutsGuid = GenerateGUIDfromString("AppStartShortcuts" & ProductUpgradeCode)
Dim AppDeskShortcutsGuid = GenerateGUIDfromString("AppDeskShortcuts" & ProductUpgradeCode)
Dim wxsString = "<?xml version=""1.0""?>" & vbCrLf
wxsString += "<?define ProductVersion = """ & ProductVersion & """?>" & vbCrLf
wxsString += "<?define ProductUpgradeCode = """ & ProductUpgradeCode & """?>" & vbCrLf
wxsString += "<?define AppFilesGuid = """ & AppFilesGuid & """?>" & vbCrLf
wxsString += "<?define AppStartShortcutsGuid = """ & AppStartShortcutsGuid & """?>" & vbCrLf
wxsString += "<?define AppDeskShortcutsGuid = """ & AppDeskShortcutsGuid & """?>" & vbCrLf
wxsString += "<?define ProductName = """ & ProductName & """?>" & vbCrLf
wxsString += "<?define ProductPublisher = """ & ProductPublisher & """?>" & vbCrLf
wxsString += "<?define ProductFileName = """ & ProductFileName & """?>" & vbCrLf
wxsString += "<?define RegRoot = """ & RegRoot & """?>" & vbCrLf
If Not ProductRemoteTag = "" Then ProductRemoteTag = " (" & ProductRemoteTag & ")"
wxsString += "<?define ProductRemoteTag = """ & ProductRemoteTag & """?>" & vbCrLf
wxsString += "<Wix xmlns=""http://schemas.microsoft.com/wix/2006/wi"">" & vbCrLf
wxsString += " <Product Id=""*"" UpgradeCode=""$(var.ProductUpgradeCode)"" " & vbCrLf
wxsString += " Name=""$(var.ProductName)$(var.ProductRemoteTag)"" Version=""$(var.ProductVersion)"" Manufacturer=""$(var.ProductPublisher)"" Language=""1033"">" & vbCrLf
wxsString += " <Package InstallerVersion=""200"" Compressed=""yes"" Comments=""Windows Installer Package"""
If Not PerUser Then
wxsString += " InstallScope=""perMachine"""
Else
wxsString += " InstallPrivileges=""limited"""
End If
wxsString += "/>" & vbCrLf
wxsString += " <Media Id=""1"" Cabinet=""rdp2msi.cab"" EmbedCab=""yes""/>" & vbCrLf
If Not PerUser Then wxsString += " <Property Id=""AllUSERS"" Value=""1""/>" & vbCrLf
wxsString += " <Upgrade Id=""$(var.ProductUpgradeCode)"">" & vbCrLf
wxsString += " <UpgradeVersion Minimum=""$(var.ProductVersion)"" OnlyDetect=""yes"" Property=""NEWERVERSIONDETECTED""/>" & vbCrLf
wxsString += " <UpgradeVersion Minimum=""0.0.0"" Maximum=""$(var.ProductVersion)"" IncludeMinimum=""yes"" IncludeMaximum=""no"" " & vbCrLf
wxsString += " Property=""OLDERVERSIONBEINGUPGRADED""/> " & vbCrLf
wxsString += " </Upgrade>" & vbCrLf
wxsString += " <Condition Message=""A newer version of this software is already installed."">NOT NEWERVERSIONDETECTED</Condition>" & vbCrLf
wxsString += " <Property Id=""MstscProperty"" Value=""mstsc.exe""/>" & vbCrLf
wxsString += " <Directory Id=""TARGETDIR"" Name=""SourceDir"">" & vbCrLf
If Not PerUser Then
wxsString += " <Directory Id=""ProgramFilesFolder"">" & vbCrLf
Else
wxsString += " <Directory Id=""LocalAppDataFolder"">" & vbCrLf
End If
wxsString += " <Directory Id=""INSTALLDIR"" Name=""RemotePackages"">" & vbCrLf
wxsString += " <Component Id=""ApplicationFiles"" Guid=""$(var.AppFilesGuid)"">" & vbCrLf
wxsString += " <File Id=""rdpFile1"" Source=""$(var.ProductFileName).rdp""/>" & vbCrLf
If HasIcon Then wxsString += " <File Id=""rdpIcon1"" Source=""$(var.ProductFileName).ico""/>" & vbCrLf
If Not FlatFileTypes = "" Then
For Each FileType In FileTypes
wxsString += " <File Id=""$(var.ProductFileName)_" & FileType & ".ico"" Source=""$(var.ProductFileName)_" & FileType & ".ico"" />" & vbCrLf
wxsString += " <ProgId Id=""remote.$(var.ProductFileName)." & FileType & "file"" Description=""$(var.ProductName) " & FileType & " file"" Icon=""$(var.ProductFileName)_" & FileType & ".ico"">" & vbCrLf
wxsString += " <Extension Id=""" & FileType & """ ContentType=""application/" & FileType & """>" & vbCrLf
wxsString += " <Verb Id=""open"" Command=""Open"" TargetProperty='MstscProperty' Argument='/REMOTEFILE:""%1"" ""[INSTALLDIR]$(var.ProductFileName).rdp""' />" & vbCrLf
wxsString += " </Extension>" & vbCrLf
wxsString += " </ProgId>" & vbCrLf
Next
End If
wxsString += " </Component>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
If ShortcutLocations.ToUpper.Contains("S") Then
wxsString += " <Directory Id=""ProgramMenuFolder"">" & vbCrLf
If Not ShortcutLocations.ToUpper.Contains("N") Then wxsString += " <Directory Id=""ProgramMenuSubfolder"" Name=""$(var.ProductName)$(var.ProductRemoteTag)"">" & vbCrLf
wxsString += " <Component Id=""ApplicationStartShortcuts"" Guid=""$(var.AppStartShortcutsGuid)"">" & vbCrLf
wxsString += " <Shortcut Id=""rdpStartShortcut1"" Name=""$(var.ProductName)$(var.ProductRemoteTag)"" Description=""$(var.ProductName)$(var.ProductRemoteTag)"" " & vbCrLf
wxsString += " Target=""[INSTALLDIR]$(var.ProductFileName).rdp"" WorkingDirectory=""INSTALLDIR"""
If HasIcon Then
wxsString += " Icon=""rdpStartIcon.rdp"" IconIndex=""0"">" & vbCrLf
wxsString += " <Icon Id=""rdpStartIcon.rdp"" SourceFile=""$(var.ProductFileName).ico"" />" & vbCrLf
wxsString += " </Shortcut>" & vbCrLf
Else
wxsString += "/>" & vbCrLf
End If
wxsString += " <RegistryValue Root=""$(var.RegRoot)"" Key=""Software\RDP2MSI\$(var.ProductName)"" " & vbCrLf
wxsString += " Name=""installed"" Type=""integer"" Value=""1"" KeyPath=""yes""/>" & vbCrLf
wxsString += " <RemoveFolder Id=""ProgramMenuSubfolder"" On=""uninstall""/>" & vbCrLf
wxsString += " </Component>" & vbCrLf
If Not ShortcutLocations.ToUpper.Contains("N") Then wxsString += " </Directory>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
End If
If ShortcutLocations.ToUpper.Contains("D") Then
wxsString += " <Directory Id=""DesktopFolder"">" & vbCrLf
wxsString += " <Component Id=""ApplicationDesktopShortcuts"" Guid=""$(var.AppDeskShortcutsGuid)"">" & vbCrLf
wxsString += " <Shortcut Id=""rdpDesktopShortcut1"" Name=""$(var.ProductName)$(var.ProductRemoteTag)"" Description=""$(var.ProductName)$(var.ProductRemoteTag)"" " & vbCrLf
wxsString += " Target=""[INSTALLDIR]$(var.ProductFileName).rdp"" WorkingDirectory=""INSTALLDIR"""
If HasIcon Then
wxsString += " Icon=""rdpDeskIcon.rdp"" IconIndex=""0"">" & vbCrLf
wxsString += " <Icon Id=""rdpDeskIcon.rdp"" SourceFile=""$(var.ProductFileName).ico"" />" & vbCrLf
wxsString += " </Shortcut>" & vbCrLf
Else
wxsString += "/>" & vbCrLf
End If
wxsString += " <RegistryValue Root=""$(var.RegRoot)"" Key=""Software\RDP2MSI\$(var.ProductName)"" " & vbCrLf
wxsString += " Name=""installed"" Type=""integer"" Value=""1"" KeyPath=""yes""/>" & vbCrLf
wxsString += " </Component>" & vbCrLf
wxsString += " </Directory>" & vbCrLf
End If
wxsString += " </Directory>" & vbCrLf
wxsString += " <InstallExecuteSequence>" & vbCrLf
wxsString += " <RemoveExistingProducts After=""InstallValidate""/>" & vbCrLf
wxsString += " </InstallExecuteSequence>" & vbCrLf
wxsString += " "
wxsString += " <Feature Id=""DefaultFeature"" Level=""1"">" & vbCrLf
wxsString += " <ComponentRef Id=""ApplicationFiles""/>" & vbCrLf
If ShortcutLocations.ToUpper.Contains("S") Then wxsString += " <ComponentRef Id=""ApplicationStartShortcuts""/>" & vbCrLf
If ShortcutLocations.ToUpper.Contains("D") Then wxsString += " <ComponentRef Id=""ApplicationDesktopShortcuts""/>" & vbCrLf
wxsString += " </Feature>" & vbCrLf
If HasIcon Then
wxsString += "<Icon Id=""rdpARPIcon.rdp"" SourceFile=""$(var.ProductFileName).ico"" />" & vbCrLf
wxsString += "<Property Id=""ARPPRODUCTICON"" Value=""rdpARPIcon.rdp"" />" & vbCrLf
End If
wxsString += " </Product>" & vbCrLf
wxsString += "</Wix>" & vbCrLf
Return wxsString
End Function
Function ReadRDPProperty(rdpFile As String, rdpProperty As String) As String
Dim rdpFileContents = My.Computer.FileSystem.ReadAllText(rdpFile)
Dim rdpFileLines = Split(rdpFileContents, vbLf)
Dim rdpValue = ""
For Each rdpLine In rdpFileLines
rdpLine = Replace(rdpLine, vbCr, "")
rdpLine = Replace(rdpLine, "|", "")
Dim rdpLineSplit = Split(rdpLine, ":", 3)
If rdpLineSplit(0) = rdpProperty Then
rdpValue = rdpLineSplit(2)
End If
Next
Return rdpValue
End Function
Private Function GenerateGUIDfromString(TheString As String)
Dim TheHash = getMD5Hash(TheString)
Dim MyGuid As Guid = New Guid(TheHash)
Return MyGuid.ToString
End Function
Private Function getMD5Hash(ByVal strToHash As String) As String
Dim md5Obj As New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash)
bytesToHash = md5Obj.ComputeHash(bytesToHash)
Dim strResult As String = ""
Dim b As Byte
For Each b In bytesToHash
strResult += b.ToString("x2")
Next
Return strResult
End Function
Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileStringW" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFileName As String) As Int32
Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringW" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Int32, _
ByVal lpFileName As String) As Int32
Public Sub writeIni(ByVal iniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamVal As String)
Dim Result As Integer = WritePrivateProfileString(Section, ParamName, ParamVal, iniFileName)
End Sub
Public Function ReadIni(ByVal IniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamDefault As String) As String
Dim ParamVal As String = Space$(1024)
Dim LenParamVal As Long = GetPrivateProfileString(Section, ParamName, ParamDefault, ParamVal, Len(ParamVal), IniFileName)
ReadIni = Left$(ParamVal, LenParamVal)
End Function
Public Function RunWait(App As String, Parameters As String) As Integer
Dim proc As New Process
proc.StartInfo.CreateNoWindow = True
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
proc.StartInfo.FileName = App
proc.StartInfo.Arguments = Parameters
proc.Start()
proc.WaitForExit()
Return proc.ExitCode
End Function
End Module

View File

@ -0,0 +1,52 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 2012 for Windows Desktop
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoteApp Tool", "RemoteApp Tool.vbproj", "{2D140FE4-0794-43AC-BE7B-9D918B3F9C61}"
ProjectSection(ProjectDependencies) = postProject
{785B6808-B2FE-4C18-9D63-6DAB46482374} = {785B6808-B2FE-4C18-9D63-6DAB46482374}
{E1CB5F9C-230F-4967-8F19-335F8E4A4906} = {E1CB5F9C-230F-4967-8F19-335F8E4A4906}
{258307D5-A407-4622-BF1A-BDCA8E3D2FAA} = {258307D5-A407-4622-BF1A-BDCA8E3D2FAA}
EndProjectSection
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoteAppLib", "..\RemoteAppLib\RemoteAppLib.vbproj", "{785B6808-B2FE-4C18-9D63-6DAB46482374}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RDP2MSILib", "..\RDP2MSILib\RDP2MSILib.vbproj", "{E1CB5F9C-230F-4967-8F19-335F8E4A4906}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RDP2MSI", "..\RDP2MSI\RDP2MSI.vbproj", "{1001A958-40DB-4444-9CD7-09D1188072D1}"
ProjectSection(ProjectDependencies) = postProject
{E1CB5F9C-230F-4967-8F19-335F8E4A4906} = {E1CB5F9C-230F-4967-8F19-335F8E4A4906}
EndProjectSection
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RDPFileLib", "..\RDPFileLib\RDPFileLib.vbproj", "{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2D140FE4-0794-43AC-BE7B-9D918B3F9C61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D140FE4-0794-43AC-BE7B-9D918B3F9C61}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D140FE4-0794-43AC-BE7B-9D918B3F9C61}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D140FE4-0794-43AC-BE7B-9D918B3F9C61}.Release|Any CPU.Build.0 = Release|Any CPU
{785B6808-B2FE-4C18-9D63-6DAB46482374}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{785B6808-B2FE-4C18-9D63-6DAB46482374}.Debug|Any CPU.Build.0 = Debug|Any CPU
{785B6808-B2FE-4C18-9D63-6DAB46482374}.Release|Any CPU.ActiveCfg = Release|Any CPU
{785B6808-B2FE-4C18-9D63-6DAB46482374}.Release|Any CPU.Build.0 = Release|Any CPU
{E1CB5F9C-230F-4967-8F19-335F8E4A4906}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1CB5F9C-230F-4967-8F19-335F8E4A4906}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1CB5F9C-230F-4967-8F19-335F8E4A4906}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1CB5F9C-230F-4967-8F19-335F8E4A4906}.Release|Any CPU.Build.0 = Release|Any CPU
{1001A958-40DB-4444-9CD7-09D1188072D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1001A958-40DB-4444-9CD7-09D1188072D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1001A958-40DB-4444-9CD7-09D1188072D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1001A958-40DB-4444-9CD7-09D1188072D1}.Release|Any CPU.Build.0 = Release|Any CPU
{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{258307D5-A407-4622-BF1A-BDCA8E3D2FAA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,292 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2D140FE4-0794-43AC-BE7B-9D918B3F9C61}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>RemoteApp_Tool.My.MyApplication</StartupObject>
<RootNamespace>RemoteApp_Tool</RootNamespace>
<AssemblyName>RemoteApp Tool</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
<IsWebBootstrapper>false</IsWebBootstrapper>
<SignAssembly>False</SignAssembly>
<DelaySign>False</DelaySign>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<WarningLevel>4</WarningLevel>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>RemoteApp Tool.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>RemoteApp Tool.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<Optimize>true</Optimize>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>add-window.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>BB4C8620F86E472788E1B361CE835B5A7E437B86</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>RemoteApp Tool_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>false</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<Optimize>true</Optimize>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<Optimize>False</Optimize>
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<BaseAddress>4194304</BaseAddress>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
</PropertyGroup>
<ItemGroup>
<Reference Include="IconLib, Version=0.73.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\IconLib.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="ApplicationEvents.vb" />
<Compile Include="HelpSystem.vb" />
<Compile Include="IconModule.vb" />
<Compile Include="LocalFtaModule.vb" />
<Compile Include="RemoteAppCreateClientConnection.Designer.vb">
<DependentUpon>RemoteAppCreateClientConnection.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppCreateClientConnection.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemoteAppFileTypeAssociation.Designer.vb">
<DependentUpon>RemoteAppFileTypeAssociation.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppFileTypeAssociation.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemoteAppAboutWindow.Designer.vb">
<DependentUpon>RemoteAppAboutWindow.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppAboutWindow.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemoteAppFunctions.vb" />
<Compile Include="RemoteAppHostOptions.Designer.vb">
<DependentUpon>RemoteAppHostOptions.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppHostOptions.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemoteAppEditWindow.Designer.vb">
<DependentUpon>RemoteAppEditWindow.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppEditWindow.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemoteAppIconPicker.Designer.vb">
<DependentUpon>RemoteAppIconPicker.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppIconPicker.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemoteAppMainWindow.Designer.vb">
<DependentUpon>RemoteAppMainWindow.vb</DependentUpon>
</Compile>
<Compile Include="RemoteAppMainWindow.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="RemoteAppAboutWindow.resx">
<DependentUpon>RemoteAppAboutWindow.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppCreateClientConnection.resx">
<DependentUpon>RemoteAppCreateClientConnection.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppFileTypeAssociation.resx">
<DependentUpon>RemoteAppFileTypeAssociation.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppHostOptions.resx">
<DependentUpon>RemoteAppHostOptions.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppEditWindow.resx">
<DependentUpon>RemoteAppEditWindow.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppIconPicker.resx">
<DependentUpon>RemoteAppIconPicker.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppMainWindow.resx">
<DependentUpon>RemoteAppMainWindow.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.manifest">
<SubType>Designer</SubType>
</None>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="App.config">
<SubType>Designer</SubType>
</None>
<None Include="RemoteApp Tool_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
<Visible>False</Visible>
<ProductName>Windows Installer 4.5</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="add-window.ico" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\RDP2MSILib\RDP2MSILib.vbproj">
<Project>{e1cb5f9c-230f-4967-8f19-335f8e4a4906}</Project>
<Name>RDP2MSILib</Name>
</ProjectReference>
<ProjectReference Include="..\RDPFileLib\RDPFileLib.vbproj">
<Project>{258307d5-a407-4622-bf1a-bdca8e3d2faa}</Project>
<Name>RDPFileLib</Name>
</ProjectReference>
<ProjectReference Include="..\RemoteAppLib\RemoteAppLib.vbproj">
<Project>{785b6808-b2fe-4c18-9d63-6dab46482374}</Project>
<Name>RemoteAppLib</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

View File

@ -0,0 +1,152 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppAboutWindow
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppAboutWindow))
Me.TitleLabel = New System.Windows.Forms.Label()
Me.VersionLabel = New System.Windows.Forms.Label()
Me.CopyrightLabel = New System.Windows.Forms.Label()
Me.SiteLinkLabel = New System.Windows.Forms.LinkLabel()
Me.IconLibCreatedByLabel = New System.Windows.Forms.Label()
Me.IconLibLabel = New System.Windows.Forms.Label()
Me.IconLibLinkLabel = New System.Windows.Forms.LinkLabel()
Me.IconLibLicenceTextLabel = New System.Windows.Forms.Label()
Me.SuspendLayout()
'
'TitleLabel
'
Me.TitleLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.TitleLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TitleLabel.Location = New System.Drawing.Point(17, 9)
Me.TitleLabel.Name = "TitleLabel"
Me.TitleLabel.Size = New System.Drawing.Size(263, 30)
Me.TitleLabel.TabIndex = 0
Me.TitleLabel.Text = "RemoteApp Tool"
Me.TitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'VersionLabel
'
Me.VersionLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.VersionLabel.Location = New System.Drawing.Point(17, 39)
Me.VersionLabel.Name = "VersionLabel"
Me.VersionLabel.Size = New System.Drawing.Size(263, 30)
Me.VersionLabel.TabIndex = 0
Me.VersionLabel.Text = "Version 0.0.0.0"
Me.VersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'CopyrightLabel
'
Me.CopyrightLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.CopyrightLabel.Location = New System.Drawing.Point(17, 69)
Me.CopyrightLabel.Name = "CopyrightLabel"
Me.CopyrightLabel.Size = New System.Drawing.Size(263, 30)
Me.CopyrightLabel.TabIndex = 0
Me.CopyrightLabel.Text = "Created by Kim Knight"
Me.CopyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'SiteLinkLabel
'
Me.SiteLinkLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.SiteLinkLabel.Location = New System.Drawing.Point(17, 99)
Me.SiteLinkLabel.Name = "SiteLinkLabel"
Me.SiteLinkLabel.Size = New System.Drawing.Size(263, 30)
Me.SiteLinkLabel.TabIndex = 1
Me.SiteLinkLabel.TabStop = True
Me.SiteLinkLabel.Text = "www.kimknight.net/remoteapptool"
Me.SiteLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'IconLibCreatedByLabel
'
Me.IconLibCreatedByLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibCreatedByLabel.Location = New System.Drawing.Point(17, 159)
Me.IconLibCreatedByLabel.Name = "IconLibCreatedByLabel"
Me.IconLibCreatedByLabel.Size = New System.Drawing.Size(263, 30)
Me.IconLibCreatedByLabel.TabIndex = 4
Me.IconLibCreatedByLabel.Text = "Created by CastorTiu"
Me.IconLibCreatedByLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'IconLibLabel
'
Me.IconLibLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.IconLibLabel.Location = New System.Drawing.Point(17, 129)
Me.IconLibLabel.Name = "IconLibLabel"
Me.IconLibLabel.Size = New System.Drawing.Size(263, 30)
Me.IconLibLabel.TabIndex = 5
Me.IconLibLabel.Text = "IconLib"
Me.IconLibLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'IconLibLinkLabel
'
Me.IconLibLinkLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibLinkLabel.Location = New System.Drawing.Point(17, 219)
Me.IconLibLinkLabel.Name = "IconLibLinkLabel"
Me.IconLibLinkLabel.Size = New System.Drawing.Size(263, 30)
Me.IconLibLinkLabel.TabIndex = 1
Me.IconLibLinkLabel.TabStop = True
Me.IconLibLinkLabel.Text = "http://creativecommons.org/licenses/by-sa/3.0/"
Me.IconLibLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'IconLibLicenceTextLabel
'
Me.IconLibLicenceTextLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibLicenceTextLabel.Location = New System.Drawing.Point(17, 189)
Me.IconLibLicenceTextLabel.Name = "IconLibLicenceTextLabel"
Me.IconLibLicenceTextLabel.Size = New System.Drawing.Size(263, 30)
Me.IconLibLicenceTextLabel.TabIndex = 4
Me.IconLibLicenceTextLabel.Text = "Licensed under a Creative Commons" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Attribution-Share Alike 3.0 Unported License"
Me.IconLibLicenceTextLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'RemoteAppAboutWindow
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.ClientSize = New System.Drawing.Size(298, 267)
Me.Controls.Add(Me.IconLibLicenceTextLabel)
Me.Controls.Add(Me.IconLibCreatedByLabel)
Me.Controls.Add(Me.IconLibLabel)
Me.Controls.Add(Me.IconLibLinkLabel)
Me.Controls.Add(Me.SiteLinkLabel)
Me.Controls.Add(Me.CopyrightLabel)
Me.Controls.Add(Me.VersionLabel)
Me.Controls.Add(Me.TitleLabel)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "RemoteAppAboutWindow"
Me.Text = "RemoteAppAboutWindow"
Me.ResumeLayout(False)
End Sub
Friend WithEvents TitleLabel As System.Windows.Forms.Label
Friend WithEvents VersionLabel As System.Windows.Forms.Label
Friend WithEvents CopyrightLabel As System.Windows.Forms.Label
Friend WithEvents SiteLinkLabel As System.Windows.Forms.LinkLabel
Friend WithEvents IconLibCreatedByLabel As System.Windows.Forms.Label
Friend WithEvents IconLibLabel As System.Windows.Forms.Label
Friend WithEvents IconLibLinkLabel As System.Windows.Forms.LinkLabel
Friend WithEvents IconLibLicenceTextLabel As System.Windows.Forms.Label
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
Imports System
Imports System.Reflection
Public Class RemoteAppAboutWindow
Private Sub RemoteAppAboutWindow_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = "About " & My.Application.Info.Title
Me.TitleLabel.Text = My.Application.Info.Title
Me.VersionLabel.Text = "Version " & My.Application.Info.Version.ToString
End Sub
Private Sub SiteLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles SiteLinkLabel.LinkClicked
System.Diagnostics.Process.Start("http://www.kimknight.net/remoteapptool")
End Sub
Private Sub IconLibLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles IconLibLinkLabel.LinkClicked
System.Diagnostics.Process.Start("http://creativecommons.org/licenses/by-sa/3.0/")
End Sub
Private Sub ralibLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs)
System.Diagnostics.Process.Start("http://www.kimknight.net/")
End Sub
Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs)
System.Diagnostics.Process.Start("http://www.kimknight.net/")
End Sub
End Class

View File

@ -0,0 +1,628 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppCreateClientConnection
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppCreateClientConnection))
Me.EditAfterSave = New System.Windows.Forms.CheckBox()
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.CreateButton = New System.Windows.Forms.Button()
Me.FileSaveRDP = New System.Windows.Forms.SaveFileDialog()
Me.CancelEditButton = New System.Windows.Forms.Button()
Me.ServerGroupBox = New System.Windows.Forms.GroupBox()
Me.Label13 = New System.Windows.Forms.Label()
Me.Label14 = New System.Windows.Forms.Label()
Me.Label12 = New System.Windows.Forms.Label()
Me.ServerPort = New System.Windows.Forms.TextBox()
Me.AltServerAddress = New System.Windows.Forms.TextBox()
Me.ServerAddress = New System.Windows.Forms.TextBox()
Me.RDGWGroupBox = New System.Windows.Forms.GroupBox()
Me.AttemptDirectCheckBox = New System.Windows.Forms.CheckBox()
Me.UseRDGatewayCheckBox = New System.Windows.Forms.CheckBox()
Me.RDGWLabel = New System.Windows.Forms.Label()
Me.GatewayAddress = New System.Windows.Forms.TextBox()
Me.ClientConnectionGroupBox = New System.Windows.Forms.GroupBox()
Me.MSIRadioButton = New System.Windows.Forms.RadioButton()
Me.RDPRadioButton = New System.Windows.Forms.RadioButton()
Me.CreateRAWebIcon = New System.Windows.Forms.CheckBox()
Me.FTAButton = New System.Windows.Forms.Button()
Me.FileBrowserIcon = New System.Windows.Forms.OpenFileDialog()
Me.FileSaveMSI = New System.Windows.Forms.SaveFileDialog()
Me.ShortcutDesktopCheckBox = New System.Windows.Forms.CheckBox()
Me.MSIGroupBox = New System.Windows.Forms.GroupBox()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.PerMachineRadioButton = New System.Windows.Forms.RadioButton()
Me.PerUserRadioButton = New System.Windows.Forms.RadioButton()
Me.TopLevelRadioButton = New System.Windows.Forms.RadioButton()
Me.SubfolderRadioButton = New System.Windows.Forms.RadioButton()
Me.ShortcutStartCheckBox = New System.Windows.Forms.CheckBox()
Me.Label3 = New System.Windows.Forms.Label()
Me.Label2 = New System.Windows.Forms.Label()
Me.ShortcutTagCheckBox = New System.Windows.Forms.CheckBox()
Me.ShortcutTagTextBox = New System.Windows.Forms.TextBox()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label1 = New System.Windows.Forms.Label()
Me.ResetButton = New System.Windows.Forms.Button()
Me.SaveButton = New System.Windows.Forms.Button()
Me.FileTypesGroupBox = New System.Windows.Forms.GroupBox()
Me.FTACountLabel = New System.Windows.Forms.Label()
Me.DisabledFTACheckBox = New System.Windows.Forms.CheckBox()
Me.ServerGroupBox.SuspendLayout()
Me.RDGWGroupBox.SuspendLayout()
Me.ClientConnectionGroupBox.SuspendLayout()
Me.MSIGroupBox.SuspendLayout()
Me.Panel1.SuspendLayout()
Me.FileTypesGroupBox.SuspendLayout()
Me.SuspendLayout()
'
'EditAfterSave
'
Me.EditAfterSave.ImageIndex = 2
Me.EditAfterSave.ImageList = Me.SmallerIcons
Me.EditAfterSave.Location = New System.Drawing.Point(313, 13)
Me.EditAfterSave.Name = "EditAfterSave"
Me.EditAfterSave.Size = New System.Drawing.Size(165, 30)
Me.EditAfterSave.TabIndex = 2
Me.EditAfterSave.Text = "Manually edit RDP file"
Me.EditAfterSave.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.EditAfterSave.UseVisualStyleBackColor = True
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "save-as_16x16.png")
Me.SmallerIcons.Images.SetKeyName(1, "msi small.ico")
Me.SmallerIcons.Images.SetKeyName(2, "doc_file_document_manager_paper_phone.ico")
Me.SmallerIcons.Images.SetKeyName(3, "16.ico")
Me.SmallerIcons.Images.SetKeyName(4, "cross.ico")
Me.SmallerIcons.Images.SetKeyName(5, "pictures (1).ico")
Me.SmallerIcons.Images.SetKeyName(6, "Remote Desktop Connection.ico")
'
'CreateButton
'
Me.CreateButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.CreateButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.CreateButton.DialogResult = System.Windows.Forms.DialogResult.OK
Me.CreateButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CreateButton.ImageIndex = 6
Me.CreateButton.ImageList = Me.SmallerIcons
Me.CreateButton.Location = New System.Drawing.Point(416, 482)
Me.CreateButton.Name = "CreateButton"
Me.CreateButton.Size = New System.Drawing.Size(80, 29)
Me.CreateButton.TabIndex = 8
Me.CreateButton.Text = "Create..."
Me.CreateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CreateButton.UseVisualStyleBackColor = False
'
'FileSaveRDP
'
Me.FileSaveRDP.DefaultExt = "rdp"
Me.FileSaveRDP.Filter = "RDP files|*.rdp"
'
'CancelEditButton
'
Me.CancelEditButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.CancelEditButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.CancelEditButton.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.CancelEditButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CancelEditButton.ImageIndex = 4
Me.CancelEditButton.ImageList = Me.SmallerIcons
Me.CancelEditButton.Location = New System.Drawing.Point(343, 482)
Me.CancelEditButton.Name = "CancelEditButton"
Me.CancelEditButton.Size = New System.Drawing.Size(67, 29)
Me.CancelEditButton.TabIndex = 7
Me.CancelEditButton.Text = "Cancel"
Me.CancelEditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CancelEditButton.UseVisualStyleBackColor = False
'
'ServerGroupBox
'
Me.ServerGroupBox.Controls.Add(Me.Label13)
Me.ServerGroupBox.Controls.Add(Me.Label14)
Me.ServerGroupBox.Controls.Add(Me.Label12)
Me.ServerGroupBox.Controls.Add(Me.ServerPort)
Me.ServerGroupBox.Controls.Add(Me.AltServerAddress)
Me.ServerGroupBox.Controls.Add(Me.ServerAddress)
Me.ServerGroupBox.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.ServerGroupBox.Location = New System.Drawing.Point(12, 92)
Me.ServerGroupBox.Name = "ServerGroupBox"
Me.ServerGroupBox.Size = New System.Drawing.Size(484, 87)
Me.ServerGroupBox.TabIndex = 1
Me.ServerGroupBox.TabStop = False
Me.ServerGroupBox.Text = "Remote Server"
'
'Label13
'
Me.Label13.AutoSize = True
Me.Label13.Location = New System.Drawing.Point(7, 54)
Me.Label13.Name = "Label13"
Me.Label13.Size = New System.Drawing.Size(101, 15)
Me.Label13.TabIndex = 104
Me.Label13.Text = "Alternative server:"
'
'Label14
'
Me.Label14.AutoSize = True
Me.Label14.Location = New System.Drawing.Point(382, 25)
Me.Label14.Name = "Label14"
Me.Label14.Size = New System.Drawing.Size(32, 15)
Me.Label14.TabIndex = 105
Me.Label14.Text = "Port:"
'
'Label12
'
Me.Label12.AutoSize = True
Me.Label12.Location = New System.Drawing.Point(7, 25)
Me.Label12.Name = "Label12"
Me.Label12.Size = New System.Drawing.Size(85, 15)
Me.Label12.TabIndex = 106
Me.Label12.Text = "Server address:"
'
'ServerPort
'
Me.ServerPort.Location = New System.Drawing.Point(420, 22)
Me.ServerPort.Name = "ServerPort"
Me.ServerPort.Size = New System.Drawing.Size(53, 23)
Me.ServerPort.TabIndex = 1
Me.ServerPort.Text = "3389"
'
'AltServerAddress
'
Me.AltServerAddress.Location = New System.Drawing.Point(121, 51)
Me.AltServerAddress.Name = "AltServerAddress"
Me.AltServerAddress.Size = New System.Drawing.Size(352, 23)
Me.AltServerAddress.TabIndex = 2
'
'ServerAddress
'
Me.ServerAddress.Location = New System.Drawing.Point(121, 22)
Me.ServerAddress.Name = "ServerAddress"
Me.ServerAddress.Size = New System.Drawing.Size(255, 23)
Me.ServerAddress.TabIndex = 0
'
'RDGWGroupBox
'
Me.RDGWGroupBox.Controls.Add(Me.AttemptDirectCheckBox)
Me.RDGWGroupBox.Controls.Add(Me.UseRDGatewayCheckBox)
Me.RDGWGroupBox.Controls.Add(Me.RDGWLabel)
Me.RDGWGroupBox.Controls.Add(Me.GatewayAddress)
Me.RDGWGroupBox.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.RDGWGroupBox.Location = New System.Drawing.Point(12, 185)
Me.RDGWGroupBox.Name = "RDGWGroupBox"
Me.RDGWGroupBox.Size = New System.Drawing.Size(484, 103)
Me.RDGWGroupBox.TabIndex = 2
Me.RDGWGroupBox.TabStop = False
Me.RDGWGroupBox.Text = "Remote Desktop Gateway"
'
'AttemptDirectCheckBox
'
Me.AttemptDirectCheckBox.AutoSize = True
Me.AttemptDirectCheckBox.Enabled = False
Me.AttemptDirectCheckBox.Location = New System.Drawing.Point(10, 76)
Me.AttemptDirectCheckBox.Name = "AttemptDirectCheckBox"
Me.AttemptDirectCheckBox.Size = New System.Drawing.Size(326, 19)
Me.AttemptDirectCheckBox.TabIndex = 2
Me.AttemptDirectCheckBox.Text = "Only use RD Gateway if direct connection is unsuccessful"
Me.AttemptDirectCheckBox.UseVisualStyleBackColor = True
'
'UseRDGatewayCheckBox
'
Me.UseRDGatewayCheckBox.AutoSize = True
Me.UseRDGatewayCheckBox.Location = New System.Drawing.Point(10, 22)
Me.UseRDGatewayCheckBox.Name = "UseRDGatewayCheckBox"
Me.UseRDGatewayCheckBox.Size = New System.Drawing.Size(111, 19)
Me.UseRDGatewayCheckBox.TabIndex = 0
Me.UseRDGatewayCheckBox.Text = "Use RD Gateway"
Me.UseRDGatewayCheckBox.UseVisualStyleBackColor = True
'
'RDGWLabel
'
Me.RDGWLabel.AutoSize = True
Me.RDGWLabel.Enabled = False
Me.RDGWLabel.Location = New System.Drawing.Point(7, 50)
Me.RDGWLabel.Name = "RDGWLabel"
Me.RDGWLabel.Size = New System.Drawing.Size(116, 15)
Me.RDGWLabel.TabIndex = 110
Me.RDGWLabel.Text = "RD Gateway address:"
'
'GatewayAddress
'
Me.GatewayAddress.Enabled = False
Me.GatewayAddress.Location = New System.Drawing.Point(145, 47)
Me.GatewayAddress.Name = "GatewayAddress"
Me.GatewayAddress.Size = New System.Drawing.Size(328, 23)
Me.GatewayAddress.TabIndex = 1
'
'ClientConnectionGroupBox
'
Me.ClientConnectionGroupBox.Controls.Add(Me.MSIRadioButton)
Me.ClientConnectionGroupBox.Controls.Add(Me.RDPRadioButton)
Me.ClientConnectionGroupBox.Controls.Add(Me.CreateRAWebIcon)
Me.ClientConnectionGroupBox.Controls.Add(Me.EditAfterSave)
Me.ClientConnectionGroupBox.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.ClientConnectionGroupBox.Location = New System.Drawing.Point(12, 12)
Me.ClientConnectionGroupBox.Name = "ClientConnectionGroupBox"
Me.ClientConnectionGroupBox.Size = New System.Drawing.Size(484, 74)
Me.ClientConnectionGroupBox.TabIndex = 0
Me.ClientConnectionGroupBox.TabStop = False
Me.ClientConnectionGroupBox.Text = "Client Connection"
'
'MSIRadioButton
'
Me.MSIRadioButton.AutoSize = True
Me.MSIRadioButton.Location = New System.Drawing.Point(10, 47)
Me.MSIRadioButton.Name = "MSIRadioButton"
Me.MSIRadioButton.Size = New System.Drawing.Size(89, 19)
Me.MSIRadioButton.TabIndex = 1
Me.MSIRadioButton.TabStop = True
Me.MSIRadioButton.Text = "MSI installer"
Me.MSIRadioButton.UseVisualStyleBackColor = True
'
'RDPRadioButton
'
Me.RDPRadioButton.AutoSize = True
Me.RDPRadioButton.Checked = True
Me.RDPRadioButton.Location = New System.Drawing.Point(10, 22)
Me.RDPRadioButton.Name = "RDPRadioButton"
Me.RDPRadioButton.Size = New System.Drawing.Size(66, 19)
Me.RDPRadioButton.TabIndex = 0
Me.RDPRadioButton.TabStop = True
Me.RDPRadioButton.Text = "RDP file"
Me.RDPRadioButton.UseVisualStyleBackColor = True
'
'CreateRAWebIcon
'
Me.CreateRAWebIcon.ImageIndex = 5
Me.CreateRAWebIcon.ImageList = Me.SmallerIcons
Me.CreateRAWebIcon.Location = New System.Drawing.Point(313, 36)
Me.CreateRAWebIcon.Name = "CreateRAWebIcon"
Me.CreateRAWebIcon.Size = New System.Drawing.Size(126, 30)
Me.CreateRAWebIcon.TabIndex = 3
Me.CreateRAWebIcon.Text = "Create icon files"
Me.CreateRAWebIcon.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.CreateRAWebIcon.UseVisualStyleBackColor = True
'
'FTAButton
'
Me.FTAButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.FTAButton.ImageIndex = 2
Me.FTAButton.ImageList = Me.SmallerIcons
Me.FTAButton.Location = New System.Drawing.Point(301, 22)
Me.FTAButton.Name = "FTAButton"
Me.FTAButton.Size = New System.Drawing.Size(172, 29)
Me.FTAButton.TabIndex = 1
Me.FTAButton.Text = "File type associations..."
Me.FTAButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.FTAButton.UseVisualStyleBackColor = False
'
'FileBrowserIcon
'
Me.FileBrowserIcon.Filter = "Icons|*.exe;*.dll;*.ico|All files|*.*"
Me.FileBrowserIcon.Title = "Browse..."
'
'FileSaveMSI
'
Me.FileSaveMSI.DefaultExt = "msi"
Me.FileSaveMSI.Filter = "MSI files|*.msi"
'
'ShortcutDesktopCheckBox
'
Me.ShortcutDesktopCheckBox.AutoSize = True
Me.ShortcutDesktopCheckBox.Checked = True
Me.ShortcutDesktopCheckBox.CheckState = System.Windows.Forms.CheckState.Checked
Me.ShortcutDesktopCheckBox.Location = New System.Drawing.Point(116, 18)
Me.ShortcutDesktopCheckBox.Name = "ShortcutDesktopCheckBox"
Me.ShortcutDesktopCheckBox.Size = New System.Drawing.Size(69, 19)
Me.ShortcutDesktopCheckBox.TabIndex = 1
Me.ShortcutDesktopCheckBox.Text = "Desktop"
Me.ShortcutDesktopCheckBox.UseVisualStyleBackColor = True
'
'MSIGroupBox
'
Me.MSIGroupBox.Controls.Add(Me.Panel1)
Me.MSIGroupBox.Controls.Add(Me.TopLevelRadioButton)
Me.MSIGroupBox.Controls.Add(Me.SubfolderRadioButton)
Me.MSIGroupBox.Controls.Add(Me.ShortcutStartCheckBox)
Me.MSIGroupBox.Controls.Add(Me.Label3)
Me.MSIGroupBox.Controls.Add(Me.Label2)
Me.MSIGroupBox.Controls.Add(Me.ShortcutTagCheckBox)
Me.MSIGroupBox.Controls.Add(Me.ShortcutDesktopCheckBox)
Me.MSIGroupBox.Controls.Add(Me.ShortcutTagTextBox)
Me.MSIGroupBox.Controls.Add(Me.Label4)
Me.MSIGroupBox.Controls.Add(Me.Label1)
Me.MSIGroupBox.Enabled = False
Me.MSIGroupBox.Location = New System.Drawing.Point(10, 363)
Me.MSIGroupBox.Name = "MSIGroupBox"
Me.MSIGroupBox.Size = New System.Drawing.Size(484, 107)
Me.MSIGroupBox.TabIndex = 4
Me.MSIGroupBox.TabStop = False
Me.MSIGroupBox.Text = "MSI Options"
'
'Panel1
'
Me.Panel1.BackColor = System.Drawing.Color.Transparent
Me.Panel1.Controls.Add(Me.PerMachineRadioButton)
Me.Panel1.Controls.Add(Me.PerUserRadioButton)
Me.Panel1.Location = New System.Drawing.Point(89, 76)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(200, 26)
Me.Panel1.TabIndex = 112
'
'PerMachineRadioButton
'
Me.PerMachineRadioButton.AutoSize = True
Me.PerMachineRadioButton.Checked = True
Me.PerMachineRadioButton.Location = New System.Drawing.Point(3, 3)
Me.PerMachineRadioButton.Name = "PerMachineRadioButton"
Me.PerMachineRadioButton.Size = New System.Drawing.Size(93, 19)
Me.PerMachineRadioButton.TabIndex = 0
Me.PerMachineRadioButton.TabStop = True
Me.PerMachineRadioButton.Text = "Per-machine"
Me.PerMachineRadioButton.UseVisualStyleBackColor = True
'
'PerUserRadioButton
'
Me.PerUserRadioButton.AutoSize = True
Me.PerUserRadioButton.Location = New System.Drawing.Point(100, 3)
Me.PerUserRadioButton.Name = "PerUserRadioButton"
Me.PerUserRadioButton.Size = New System.Drawing.Size(69, 19)
Me.PerUserRadioButton.TabIndex = 1
Me.PerUserRadioButton.TabStop = True
Me.PerUserRadioButton.Text = "Per-user"
Me.PerUserRadioButton.UseVisualStyleBackColor = True
'
'TopLevelRadioButton
'
Me.TopLevelRadioButton.AutoSize = True
Me.TopLevelRadioButton.Location = New System.Drawing.Point(366, 17)
Me.TopLevelRadioButton.Name = "TopLevelRadioButton"
Me.TopLevelRadioButton.Size = New System.Drawing.Size(72, 19)
Me.TopLevelRadioButton.TabIndex = 4
Me.TopLevelRadioButton.Text = "Top level"
Me.TopLevelRadioButton.UseVisualStyleBackColor = True
'
'SubfolderRadioButton
'
Me.SubfolderRadioButton.AutoSize = True
Me.SubfolderRadioButton.Checked = True
Me.SubfolderRadioButton.Location = New System.Drawing.Point(284, 17)
Me.SubfolderRadioButton.Name = "SubfolderRadioButton"
Me.SubfolderRadioButton.Size = New System.Drawing.Size(76, 19)
Me.SubfolderRadioButton.TabIndex = 3
Me.SubfolderRadioButton.TabStop = True
Me.SubfolderRadioButton.Text = "Subfolder"
Me.SubfolderRadioButton.UseVisualStyleBackColor = True
'
'ShortcutStartCheckBox
'
Me.ShortcutStartCheckBox.AutoSize = True
Me.ShortcutStartCheckBox.Checked = True
Me.ShortcutStartCheckBox.CheckState = System.Windows.Forms.CheckState.Checked
Me.ShortcutStartCheckBox.Location = New System.Drawing.Point(191, 18)
Me.ShortcutStartCheckBox.Name = "ShortcutStartCheckBox"
Me.ShortcutStartCheckBox.Size = New System.Drawing.Size(87, 19)
Me.ShortcutStartCheckBox.TabIndex = 2
Me.ShortcutStartCheckBox.Text = "Start Menu:"
Me.ShortcutStartCheckBox.UseVisualStyleBackColor = True
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(289, 50)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(11, 15)
Me.Label3.TabIndex = 7
Me.Label3.Text = ")"
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(110, 49)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(11, 15)
Me.Label2.TabIndex = 4
Me.Label2.Text = "("
'
'ShortcutTagCheckBox
'
Me.ShortcutTagCheckBox.AutoSize = True
Me.ShortcutTagCheckBox.Checked = True
Me.ShortcutTagCheckBox.CheckState = System.Windows.Forms.CheckState.Checked
Me.ShortcutTagCheckBox.Location = New System.Drawing.Point(10, 48)
Me.ShortcutTagCheckBox.Name = "ShortcutTagCheckBox"
Me.ShortcutTagCheckBox.Size = New System.Drawing.Size(94, 19)
Me.ShortcutTagCheckBox.TabIndex = 5
Me.ShortcutTagCheckBox.Text = "Shortcut tag:"
Me.ShortcutTagCheckBox.UseVisualStyleBackColor = True
'
'ShortcutTagTextBox
'
Me.ShortcutTagTextBox.Location = New System.Drawing.Point(127, 46)
Me.ShortcutTagTextBox.Name = "ShortcutTagTextBox"
Me.ShortcutTagTextBox.Size = New System.Drawing.Size(156, 23)
Me.ShortcutTagTextBox.TabIndex = 6
Me.ShortcutTagTextBox.Text = "remote"
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Location = New System.Drawing.Point(8, 80)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(75, 15)
Me.Label4.TabIndex = 8
Me.Label4.Text = "Install scope:"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(7, 19)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(103, 15)
Me.Label1.TabIndex = 0
Me.Label1.Text = "Place shortcuts in:"
'
'ResetButton
'
Me.ResetButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.ResetButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.ResetButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.ResetButton.ImageIndex = 3
Me.ResetButton.ImageList = Me.SmallerIcons
Me.ResetButton.Location = New System.Drawing.Point(126, 482)
Me.ResetButton.Name = "ResetButton"
Me.ResetButton.Size = New System.Drawing.Size(121, 29)
Me.ResetButton.TabIndex = 6
Me.ResetButton.Text = "Reset to default"
Me.ResetButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.ResetButton.UseVisualStyleBackColor = False
'
'SaveButton
'
Me.SaveButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.SaveButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.SaveButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.SaveButton.ImageIndex = 0
Me.SaveButton.ImageList = Me.SmallerIcons
Me.SaveButton.Location = New System.Drawing.Point(12, 482)
Me.SaveButton.Name = "SaveButton"
Me.SaveButton.Size = New System.Drawing.Size(108, 29)
Me.SaveButton.TabIndex = 5
Me.SaveButton.Text = "Save settings"
Me.SaveButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.SaveButton.UseVisualStyleBackColor = False
'
'FileTypesGroupBox
'
Me.FileTypesGroupBox.Controls.Add(Me.FTACountLabel)
Me.FileTypesGroupBox.Controls.Add(Me.DisabledFTACheckBox)
Me.FileTypesGroupBox.Controls.Add(Me.FTAButton)
Me.FileTypesGroupBox.Location = New System.Drawing.Point(12, 294)
Me.FileTypesGroupBox.Name = "FileTypesGroupBox"
Me.FileTypesGroupBox.Size = New System.Drawing.Size(482, 63)
Me.FileTypesGroupBox.TabIndex = 3
Me.FileTypesGroupBox.TabStop = False
Me.FileTypesGroupBox.Text = "File Type Associations"
'
'FTACountLabel
'
Me.FTACountLabel.AutoSize = True
Me.FTACountLabel.Location = New System.Drawing.Point(154, 29)
Me.FTACountLabel.Name = "FTACountLabel"
Me.FTACountLabel.Size = New System.Drawing.Size(52, 15)
Me.FTACountLabel.TabIndex = 2
Me.FTACountLabel.Text = "Count: 0"
'
'DisabledFTACheckBox
'
Me.DisabledFTACheckBox.AutoSize = True
Me.DisabledFTACheckBox.Location = New System.Drawing.Point(10, 28)
Me.DisabledFTACheckBox.Name = "DisabledFTACheckBox"
Me.DisabledFTACheckBox.Size = New System.Drawing.Size(71, 19)
Me.DisabledFTACheckBox.TabIndex = 0
Me.DisabledFTACheckBox.Text = "Disabled"
Me.DisabledFTACheckBox.UseVisualStyleBackColor = True
'
'RemoteAppCreateClientConnection
'
Me.AcceptButton = Me.CreateButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.CancelButton = Me.CancelEditButton
Me.ClientSize = New System.Drawing.Size(507, 523)
Me.Controls.Add(Me.FileTypesGroupBox)
Me.Controls.Add(Me.MSIGroupBox)
Me.Controls.Add(Me.ClientConnectionGroupBox)
Me.Controls.Add(Me.RDGWGroupBox)
Me.Controls.Add(Me.ServerGroupBox)
Me.Controls.Add(Me.CreateButton)
Me.Controls.Add(Me.SaveButton)
Me.Controls.Add(Me.ResetButton)
Me.Controls.Add(Me.CancelEditButton)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "RemoteAppCreateClientConnection"
Me.Text = "RemoteAppCreateClientConnection"
Me.ServerGroupBox.ResumeLayout(False)
Me.ServerGroupBox.PerformLayout()
Me.RDGWGroupBox.ResumeLayout(False)
Me.RDGWGroupBox.PerformLayout()
Me.ClientConnectionGroupBox.ResumeLayout(False)
Me.ClientConnectionGroupBox.PerformLayout()
Me.MSIGroupBox.ResumeLayout(False)
Me.MSIGroupBox.PerformLayout()
Me.Panel1.ResumeLayout(False)
Me.Panel1.PerformLayout()
Me.FileTypesGroupBox.ResumeLayout(False)
Me.FileTypesGroupBox.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents EditAfterSave As System.Windows.Forms.CheckBox
Friend WithEvents SmallerIcons As System.Windows.Forms.ImageList
Friend WithEvents CreateButton As System.Windows.Forms.Button
Friend WithEvents FileSaveRDP As System.Windows.Forms.SaveFileDialog
Friend WithEvents CancelEditButton As System.Windows.Forms.Button
Friend WithEvents ServerGroupBox As System.Windows.Forms.GroupBox
Friend WithEvents Label13 As System.Windows.Forms.Label
Friend WithEvents Label14 As System.Windows.Forms.Label
Friend WithEvents Label12 As System.Windows.Forms.Label
Friend WithEvents ServerPort As System.Windows.Forms.TextBox
Friend WithEvents AltServerAddress As System.Windows.Forms.TextBox
Friend WithEvents ServerAddress As System.Windows.Forms.TextBox
Friend WithEvents RDGWGroupBox As System.Windows.Forms.GroupBox
Friend WithEvents UseRDGatewayCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents RDGWLabel As System.Windows.Forms.Label
Friend WithEvents GatewayAddress As System.Windows.Forms.TextBox
Friend WithEvents ClientConnectionGroupBox As System.Windows.Forms.GroupBox
Friend WithEvents MSIRadioButton As System.Windows.Forms.RadioButton
Friend WithEvents RDPRadioButton As System.Windows.Forms.RadioButton
Friend WithEvents FTAButton As System.Windows.Forms.Button
Friend WithEvents FileBrowserIcon As System.Windows.Forms.OpenFileDialog
Friend WithEvents FileSaveMSI As System.Windows.Forms.SaveFileDialog
Friend WithEvents AttemptDirectCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents ShortcutDesktopCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents MSIGroupBox As System.Windows.Forms.GroupBox
Friend WithEvents ShortcutStartCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents ShortcutTagCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents ShortcutTagTextBox As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Label3 As System.Windows.Forms.Label
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents TopLevelRadioButton As System.Windows.Forms.RadioButton
Friend WithEvents SubfolderRadioButton As System.Windows.Forms.RadioButton
Friend WithEvents ResetButton As System.Windows.Forms.Button
Friend WithEvents SaveButton As System.Windows.Forms.Button
Friend WithEvents CreateRAWebIcon As System.Windows.Forms.CheckBox
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents PerMachineRadioButton As System.Windows.Forms.RadioButton
Friend WithEvents PerUserRadioButton As System.Windows.Forms.RadioButton
Friend WithEvents Label4 As System.Windows.Forms.Label
Friend WithEvents FileTypesGroupBox As System.Windows.Forms.GroupBox
Friend WithEvents DisabledFTACheckBox As System.Windows.Forms.CheckBox
Friend WithEvents FTACountLabel As System.Windows.Forms.Label
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,357 @@
Imports VB = Microsoft.VisualBasic
Public Class RemoteAppCreateClientConnection
Private RemoteApp As New RemoteAppLib.RemoteApp
Public Sub CreateClientConnection(SelectedRemoteApp As RemoteAppLib.RemoteApp)
RemoteApp = SelectedRemoteApp
Dim RemoteAppShortName = RemoteApp.Name
Me.Text = "Create Client Connection for " & RemoteAppShortName
SetCCWindowSettings()
If Me.ServerAddress.Text = "" Then Me.ServerAddress.Text = System.Net.Dns.GetHostName
If Me.AltServerAddress.Text = "" Then Me.AltServerAddress.Text = Me.ServerAddress.Text
If Me.ServerPort.Text = "0" Then Me.ServerPort.Text = "3389"
If Not My.Computer.FileSystem.FileExists(RemoteApp.IconPath) Then
CreateRAWebIcon.Checked = False
CreateRAWebIcon.Enabled = False
Else
CreateRAWebIcon.Enabled = RDPRadioButton.Checked
End If
Dim wx As New RDP2MSIlib.RDP
If Not wx.WixInstalled Then
RDPRadioButton.Checked = True
MSIRadioButton.Enabled = False
MSIRadioButton.Text = "MSI installer (requires WiX Toolset)"
End If
If Not RemoteApp.FileTypeAssociations Is Nothing Then _
FTACountLabel.Text = "Count: " & RemoteApp.FileTypeAssociations.Count
Me.RDPRadioButton.Focus()
HelpSystem.SetupTips(Me)
Me.ShowDialog()
RemoteAppMainWindow.ReloadApps()
Me.Dispose()
End Sub
Sub ResetCCWindowSettings()
My.Settings.SavedConnectionModeMSI = False
My.Settings.SavedOpenWithNotepad = False
My.Settings.SavedServerAddress = System.Net.Dns.GetHostName
My.Settings.SavedServerPort = 3389
My.Settings.SavedAltServerAddress = My.Settings.SavedServerAddress
My.Settings.SavedUseRDGateway = False
My.Settings.SavedRDGatewayAddress = ""
My.Settings.SavedAttemptDirectRDGateway = False
My.Settings.SavedMSIShortcutDesktop = True
My.Settings.SavedMSIShortcutStart = True
My.Settings.SavedMSIShortcutStartTopLevel = False
My.Settings.SavedUseShortcutTag = True
My.Settings.SavedShortcutTag = "remote"
My.Settings.SavedClientConnectionOptions = False
My.Settings.SavedCreateRAWebIcon = False
My.Settings.SavedMSIPerUser = False
My.Settings.SavedDisableFTA = False
End Sub
Sub SaveCCWindowSettings()
My.Settings.SavedConnectionModeMSI = MSIRadioButton.Checked
My.Settings.SavedOpenWithNotepad = EditAfterSave.Checked
My.Settings.SavedServerAddress = ServerAddress.Text
My.Settings.SavedServerPort = Val(ServerPort.Text)
My.Settings.SavedAltServerAddress = AltServerAddress.Text
My.Settings.SavedUseRDGateway = UseRDGatewayCheckBox.Checked
My.Settings.SavedRDGatewayAddress = GatewayAddress.Text
My.Settings.SavedAttemptDirectRDGateway = AttemptDirectCheckBox.Checked
My.Settings.SavedMSIShortcutDesktop = ShortcutDesktopCheckBox.Checked
My.Settings.SavedMSIShortcutStart = ShortcutStartCheckBox.Checked
My.Settings.SavedMSIShortcutStartTopLevel = TopLevelRadioButton.Checked
My.Settings.SavedUseShortcutTag = ShortcutTagCheckBox.Checked
My.Settings.SavedShortcutTag = ShortcutTagTextBox.Text
My.Settings.SavedCreateRAWebIcon = CreateRAWebIcon.Checked
My.Settings.SavedMSIPerUser = PerUserRadioButton.Checked
My.Settings.SavedDisableFTA = DisabledFTACheckBox.Checked
End Sub
Sub SetCCWindowSettings()
If My.Settings.SavedConnectionModeMSI = True Then
RDPRadioButton.Checked = False
MSIRadioButton.Checked = True
Else
RDPRadioButton.Checked = True
MSIRadioButton.Checked = False
End If
EditAfterSave.Checked = My.Settings.SavedOpenWithNotepad
ServerAddress.Text = My.Settings.SavedServerAddress
ServerPort.Text = My.Settings.SavedServerPort
AltServerAddress.Text = My.Settings.SavedAltServerAddress
UseRDGatewayCheckBox.Checked = My.Settings.SavedUseRDGateway
GatewayAddress.Text = My.Settings.SavedRDGatewayAddress
AttemptDirectCheckBox.Checked = My.Settings.SavedAttemptDirectRDGateway
ShortcutDesktopCheckBox.Checked = My.Settings.SavedMSIShortcutDesktop
ShortcutStartCheckBox.Checked = My.Settings.SavedMSIShortcutStart
If My.Settings.SavedMSIShortcutStartTopLevel = True Then
SubfolderRadioButton.Checked = False
TopLevelRadioButton.Checked = True
Else
SubfolderRadioButton.Checked = True
TopLevelRadioButton.Checked = False
End If
ShortcutTagCheckBox.Checked = My.Settings.SavedUseShortcutTag
ShortcutTagTextBox.Text = My.Settings.SavedShortcutTag
MSIGroupBox.Enabled = MSIRadioButton.Checked
CreateRAWebIcon.Checked = My.Settings.SavedCreateRAWebIcon
DisabledFTACheckBox.Checked = My.Settings.SavedDisableFTA
If My.Settings.SavedMSIPerUser = False Then
PerMachineRadioButton.Checked = True
PerUserRadioButton.Checked = False
Else
PerMachineRadioButton.Checked = False
PerUserRadioButton.Checked = True
End If
End Sub
Private Sub UseRDGatewayCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles UseRDGatewayCheckBox.CheckedChanged
If UseRDGatewayCheckBox.Checked Then
Me.GatewayAddress.Enabled = True
Me.RDGWLabel.Enabled = True
Me.AttemptDirectCheckBox.Enabled = True
Else
Me.GatewayAddress.Enabled = False
Me.RDGWLabel.Enabled = False
Me.AttemptDirectCheckBox.Enabled = False
End If
End Sub
Private Sub RDPRadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles RDPRadioButton.CheckedChanged
MSIGroupBox.Enabled = MSIRadioButton.Checked
EditAfterSave.Enabled = RDPRadioButton.Checked
CreateRAWebIcon.Enabled = RDPRadioButton.Checked
If RDPRadioButton.Checked Then
CreateButton.ImageIndex = 6
Else
CreateButton.ImageIndex = 1
End If
End Sub
Private Sub CreateButton_Click(sender As Object, e As EventArgs) Handles CreateButton.Click
Dim RDPPath = ""
Dim MSIPath = ""
Dim TempMSIPath = ""
If DisabledFTACheckBox.Checked And Not RemoteApp.FileTypeAssociations Is Nothing Then RemoteApp.FileTypeAssociations.Clear()
If RDPRadioButton.Checked Then
FileSaveRDP.FileName = RemoteApp.Name
If Not FileSaveRDP.ShowDialog() = Windows.Forms.DialogResult.OK Then Exit Sub
RDPPath = FileSaveRDP.FileName
Else
FileSaveMSI.FileName = RemoteApp.Name
If Not FileSaveMSI.ShowDialog() = Windows.Forms.DialogResult.OK Then Exit Sub
MSIPath = FileSaveMSI.FileName
RDPPath = Environment.GetEnvironmentVariable("TEMP") & "\" & RemoteApp.Name & ".rdp"
TempMSIPath = Environment.GetEnvironmentVariable("TEMP") & "\" & RemoteApp.Name & ".msi"
End If
Dim gwaddress As String = ""
Dim trydirect As Boolean = False
If UseRDGatewayCheckBox.Checked Then
gwaddress = GatewayAddress.Text
trydirect = AttemptDirectCheckBox.Checked
End If
If RDPRadioButton.Checked Then
CreateRDPFile(RDPPath, RemoteApp)
'!!!!!!! If it's an RDP file
If EditAfterSave.Checked Then
Dim CmdLine = GetSysDir() & "\notepad.exe"
System.Diagnostics.Process.Start(CmdLine, FileSaveRDP.FileName)
End If
If CreateRAWebIcon.Checked Then
Dim IconFilePath = Microsoft.VisualBasic.Left(RDPPath, RDPPath.Length - 4) & ".ico"
If ExtractToIco(RemoteApp.IconPath, RemoteApp.IconIndex, IconFilePath) = False Then
MessageBox.Show("Icon could not be created the RemoteApp. RDP file will still be created.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
For Each FTA As RemoteAppLib.FileTypeAssociation In RemoteApp.FileTypeAssociations
Dim ProductFileName = VB.Left(RDPPath, RDPPath.Length - 4)
ExtractFTIcon(ProductFileName, FTA)
Next
End If
Else
'!!!!!!! If it's an MSI
Dim RDP As New RDP2MSIlib.RDP
CreateRDPFile(RDPPath, RemoteApp)
RDP.rdpPath = RDPPath
RDP.ShortcutOnDesktop = ShortcutDesktopCheckBox.Checked
RDP.ShortcutInStart = ShortcutStartCheckBox.Checked
RDP.ShortcutSubfolderInStart = SubfolderRadioButton.Checked
RDP.ProductRemoteTag = ShortcutTagTextBox.Text
RDP.PerUser = PerUserRadioButton.Checked
Dim FilesToDelete As New ArrayList
Dim ProductFileName = VB.Left(RDPPath, RDPPath.Length - 4)
Dim IconFilePath = ProductFileName & ".ico"
FilesToDelete.Add(RDPPath)
If ExtractToIco(RemoteApp.IconPath, RemoteApp.IconIndex, IconFilePath) = False Then
MessageBox.Show("There was an error loading icon:" & vbCrLf & RemoteApp.IconPath & "," & RemoteApp.IconIndex & vbCrLf & "The MSI will still be created but the main icon will be missing.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Else
FilesToDelete.Add(IconFilePath)
End If
If Not RemoteApp.FileTypeAssociations Is Nothing Then
For Each FTA As RemoteAppLib.FileTypeAssociation In RemoteApp.FileTypeAssociations
ExtractFTIcon(ProductFileName, FTA)
FilesToDelete.Add(ProductFileName & "." & FTA.Extension & ".ico")
Next
RDP.FlatFileTypes = RemoteApp.FileTypeAssociations.GetFlatFileTypes
End If
RDP.CreateMSI(MSIPath)
DeleteFiles(FilesToDelete)
End If
Me.Close()
End Sub
Private Sub ExtractFTIcon(ProductFileName As String, FTA As RemoteAppLib.FileTypeAssociation)
'Extract icon for filetype
If ExtractToIco(FTA.IconPath, FTA.IconIndex, ProductFileName & "." & FTA.Extension & ".ico") = False Then
'If filetype icon fails to extract, then grab the default document icon from Shell32.dll
ExtractToIco(GetSysDir() & "\shell32.dll", 0, ProductFileName & "." & FTA.Extension & ".ico")
'Possibly show an error here??
End If
End Sub
Private Sub CreateRDPFile(RDPPath As String, RemoteApp As RemoteAppLib.RemoteApp)
Dim App As New RemoteAppLib.RemoteApp
App = RemoteApp
Dim FileTypeAssociations As RemoteAppLib.FileTypeAssociationCollection
FileTypeAssociations = App.FileTypeAssociations
Dim ServerAddress = Me.ServerAddress.Text
Dim AltServerAddress = Me.AltServerAddress.Text
Dim ServerPort = Me.ServerPort.Text
Dim FlatFileTypes = ""
If Not FileTypeAssociations Is Nothing Then FlatFileTypes = FileTypeAssociations.GetFlatFileTypes
Dim RDPfile As New RDPFileLib.RDPFile
RDPfile.full_address = ServerAddress
RDPfile.alternate_full_address = AltServerAddress
RDPfile.server_port = Val(ServerPort)
RDPfile.remoteapplicationname = App.FullName
RDPfile.remoteapplicationprogram = "||" & App.Name
RDPfile.remoteapplicationmode = 1
RDPfile.disableremoteappcapscheck = 1
RDPfile.alternate_shell = "rdpinit.exe"
If UseRDGatewayCheckBox.Checked Then
RDPfile.gatewayhostname = Me.GatewayAddress.Text
If Me.AttemptDirectCheckBox.CheckAlign Then RDPfile.gatewayusagemethod = 2 Else RDPfile.gatewayusagemethod = 1
RDPfile.gatewayprofileusagemethod = 1
End If
RDPfile.prompt_for_credentials_on_client = 1
RDPfile.promptcredentialonce = 0
RDPfile.devicestoredirect = "*"
RDPfile.drivestoredirect = "*"
RDPfile.redirectcomports = 1
RDPfile.redirectdrives = 1
RDPfile.allow_desktop_composition = 1
RDPfile.allow_font_smoothing = 1
RDPfile.span_monitors = 1
RDPfile.use_multimon = 1
RDPfile.remoteapplicationfileextensions = FlatFileTypes
RDPfile.SaveRDPfile(RDPPath)
End Sub
Private Function GetFlatFileTypesList(AppName As String, Optional Delim As String = ",") As String
Dim BaseKeyName As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications\" & AppName & "\Filetypes"
Dim FlatFTList = ""
Try
Dim BaseKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey(BaseKeyName)
For Each FT As String In BaseKey.GetSubKeyNames
FlatFTList &= "." & FT & Delim
Next
FlatFTList = FlatFTList.TrimEnd(Delim)
Catch Ex As Exception
End Try
Return FlatFTList
End Function
Private Sub FTAButton_Click(sender As Object, e As EventArgs) Handles FTAButton.Click
MessageBox.Show(Me, "Changes made here to File Type Associations are for this client connection only and will not be saved for next time." & vbCrLf & vbCrLf & _
"To make permanent changes to the File Type Associations for this RemoteApp, edit the RemoteApp.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
RemoteApp = RemoteAppFileTypeAssociation.EditFileTypes(RemoteApp)
If Not RemoteApp.FileTypeAssociations Is Nothing Then _
FTACountLabel.Text = "Count: " & RemoteApp.FileTypeAssociations.Count
End Sub
Private Sub ShortcutStartCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles ShortcutStartCheckBox.CheckedChanged
SubfolderRadioButton.Enabled = ShortcutStartCheckBox.Checked
TopLevelRadioButton.Enabled = ShortcutStartCheckBox.Checked
End Sub
Private Sub ShortcutTagCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles ShortcutTagCheckBox.CheckedChanged
ShortcutTagTextBox.Enabled = ShortcutTagCheckBox.Checked
End Sub
Private Sub ServerAddress_TextChanged(sender As Object, e As EventArgs) Handles ServerAddress.TextChanged
ValidateDNSname(ServerAddress)
End Sub
Private Sub AltServerAddress_TextChanged(sender As Object, e As EventArgs) Handles AltServerAddress.TextChanged
ValidateDNSname(AltServerAddress)
End Sub
Private Sub ServerPort_TextChanged(sender As Object, e As EventArgs) Handles ServerPort.TextChanged
ValidatePort(ServerPort)
End Sub
Private Sub ResetButton_Click(sender As Object, e As EventArgs) Handles ResetButton.Click
ResetCCWindowSettings()
SetCCWindowSettings()
End Sub
Private Sub SaveButton_Click(sender As Object, e As EventArgs) Handles SaveButton.Click
SaveCCWindowSettings()
End Sub
Private Sub DisabledFTACheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles DisabledFTACheckBox.CheckedChanged
If Me.DisabledFTACheckBox.Checked Then
Me.FTAButton.Enabled = False
Me.FTACountLabel.Enabled = False
Else
Me.FTAButton.Enabled = True
Me.FTACountLabel.Enabled = True
End If
End Sub
End Class

View File

@ -0,0 +1,452 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppEditWindow
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppEditWindow))
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.IconPathCopyButton = New System.Windows.Forms.Button()
Me.VPathCopyButton = New System.Windows.Forms.Button()
Me.TSWAbox = New System.Windows.Forms.ComboBox()
Me.CommandLineOptionCombo = New System.Windows.Forms.ComboBox()
Me.IconPathText = New System.Windows.Forms.TextBox()
Me.CommandLineText = New System.Windows.Forms.TextBox()
Me.Label11 = New System.Windows.Forms.Label()
Me.Label10 = New System.Windows.Forms.Label()
Me.Label8 = New System.Windows.Forms.Label()
Me.VPathText = New System.Windows.Forms.TextBox()
Me.Label7 = New System.Windows.Forms.Label()
Me.PathText = New System.Windows.Forms.TextBox()
Me.Label6 = New System.Windows.Forms.Label()
Me.FullNameText = New System.Windows.Forms.TextBox()
Me.Label5 = New System.Windows.Forms.Label()
Me.IconIndexText = New System.Windows.Forms.TextBox()
Me.ShortNameText = New System.Windows.Forms.TextBox()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label3 = New System.Windows.Forms.Label()
Me.Label12 = New System.Windows.Forms.Label()
Me.CancelEditButton = New System.Windows.Forms.Button()
Me.FileBrowserPath = New System.Windows.Forms.OpenFileDialog()
Me.FileBrowserIcon = New System.Windows.Forms.OpenFileDialog()
Me.FileBrowserVPath = New System.Windows.Forms.OpenFileDialog()
Me.SaveButton = New System.Windows.Forms.Button()
Me.BrowseIconPath = New System.Windows.Forms.Button()
Me.BrowseVPath = New System.Windows.Forms.Button()
Me.BrowsePath = New System.Windows.Forms.Button()
Me.FTAButton = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "favorites_16x16.png")
Me.SmallerIcons.Images.SetKeyName(1, "folder_16x16.png")
Me.SmallerIcons.Images.SetKeyName(2, "dotdotdot.ico")
Me.SmallerIcons.Images.SetKeyName(3, "inside_icons_azure_marker_map_socialize_base.ico")
Me.SmallerIcons.Images.SetKeyName(4, "pictures (1).ico")
Me.SmallerIcons.Images.SetKeyName(5, "pictures.ico")
Me.SmallerIcons.Images.SetKeyName(6, "arrows_line_connector_with_draw.png")
Me.SmallerIcons.Images.SetKeyName(7, "doc_file_document_manager_paper_phone.ico")
Me.SmallerIcons.Images.SetKeyName(8, "cross.ico")
'
'IconPathCopyButton
'
Me.IconPathCopyButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconPathCopyButton.AutoSize = True
Me.IconPathCopyButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.IconPathCopyButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.IconPathCopyButton.ImageIndex = 6
Me.IconPathCopyButton.ImageList = Me.SmallerIcons
Me.IconPathCopyButton.Location = New System.Drawing.Point(382, 97)
Me.IconPathCopyButton.Name = "IconPathCopyButton"
Me.IconPathCopyButton.Size = New System.Drawing.Size(61, 27)
Me.IconPathCopyButton.TabIndex = 15
Me.IconPathCopyButton.Text = "Copy"
Me.IconPathCopyButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.IconPathCopyButton.UseVisualStyleBackColor = False
'
'VPathCopyButton
'
Me.VPathCopyButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.VPathCopyButton.AutoSize = True
Me.VPathCopyButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.VPathCopyButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.VPathCopyButton.ImageIndex = 6
Me.VPathCopyButton.ImageList = Me.SmallerIcons
Me.VPathCopyButton.Location = New System.Drawing.Point(382, 67)
Me.VPathCopyButton.Name = "VPathCopyButton"
Me.VPathCopyButton.Size = New System.Drawing.Size(61, 27)
Me.VPathCopyButton.TabIndex = 9
Me.VPathCopyButton.Text = "Copy"
Me.VPathCopyButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.VPathCopyButton.UseVisualStyleBackColor = False
'
'TSWAbox
'
Me.TSWAbox.BackColor = System.Drawing.Color.WhiteSmoke
Me.TSWAbox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.TSWAbox.FormattingEnabled = True
Me.TSWAbox.Items.AddRange(New Object() {"No", "Yes"})
Me.TSWAbox.Location = New System.Drawing.Point(321, 157)
Me.TSWAbox.Name = "TSWAbox"
Me.TSWAbox.Size = New System.Drawing.Size(81, 23)
Me.TSWAbox.TabIndex = 22
'
'CommandLineOptionCombo
'
Me.CommandLineOptionCombo.BackColor = System.Drawing.Color.WhiteSmoke
Me.CommandLineOptionCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.CommandLineOptionCombo.FormattingEnabled = True
Me.CommandLineOptionCombo.Items.AddRange(New Object() {"Disabled", "Optional", "Enforced"})
Me.CommandLineOptionCombo.Location = New System.Drawing.Point(145, 157)
Me.CommandLineOptionCombo.Name = "CommandLineOptionCombo"
Me.CommandLineOptionCombo.Size = New System.Drawing.Size(81, 23)
Me.CommandLineOptionCombo.TabIndex = 20
'
'IconPathText
'
Me.IconPathText.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconPathText.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.IconPathText.Location = New System.Drawing.Point(78, 99)
Me.IconPathText.Name = "IconPathText"
Me.IconPathText.Size = New System.Drawing.Size(159, 23)
Me.IconPathText.TabIndex = 12
'
'CommandLineText
'
Me.CommandLineText.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CommandLineText.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CommandLineText.Location = New System.Drawing.Point(112, 128)
Me.CommandLineText.Name = "CommandLineText"
Me.CommandLineText.Size = New System.Drawing.Size(364, 23)
Me.CommandLineText.TabIndex = 18
'
'Label11
'
Me.Label11.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Label11.AutoSize = True
Me.Label11.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Label11.Location = New System.Drawing.Point(243, 103)
Me.Label11.Name = "Label11"
Me.Label11.Size = New System.Drawing.Size(64, 15)
Me.Label11.TabIndex = 13
Me.Label11.Text = "Icon Index:"
'
'Label10
'
Me.Label10.AutoSize = True
Me.Label10.Location = New System.Drawing.Point(232, 160)
Me.Label10.Name = "Label10"
Me.Label10.Size = New System.Drawing.Size(83, 15)
Me.Label10.TabIndex = 21
Me.Label10.Text = "TSWebAccess:"
'
'Label8
'
Me.Label8.AutoSize = True
Me.Label8.Location = New System.Drawing.Point(12, 160)
Me.Label8.Name = "Label8"
Me.Label8.Size = New System.Drawing.Size(127, 15)
Me.Label8.TabIndex = 19
Me.Label8.Text = "Command line option:"
'
'VPathText
'
Me.VPathText.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.VPathText.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.VPathText.Location = New System.Drawing.Point(60, 70)
Me.VPathText.Name = "VPathText"
Me.VPathText.Size = New System.Drawing.Size(315, 23)
Me.VPathText.TabIndex = 8
'
'Label7
'
Me.Label7.AutoSize = True
Me.Label7.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Label7.Location = New System.Drawing.Point(12, 102)
Me.Label7.Name = "Label7"
Me.Label7.Size = New System.Drawing.Size(60, 15)
Me.Label7.TabIndex = 11
Me.Label7.Text = "Icon path:"
'
'PathText
'
Me.PathText.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.PathText.Location = New System.Drawing.Point(60, 41)
Me.PathText.Name = "PathText"
Me.PathText.Size = New System.Drawing.Size(383, 23)
Me.PathText.TabIndex = 5
'
'Label6
'
Me.Label6.AutoSize = True
Me.Label6.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Label6.Location = New System.Drawing.Point(12, 131)
Me.Label6.Name = "Label6"
Me.Label6.Size = New System.Drawing.Size(89, 15)
Me.Label6.TabIndex = 17
Me.Label6.Text = "Command line:"
'
'FullNameText
'
Me.FullNameText.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.FullNameText.Location = New System.Drawing.Point(304, 12)
Me.FullNameText.Name = "FullNameText"
Me.FullNameText.Size = New System.Drawing.Size(172, 23)
Me.FullNameText.TabIndex = 3
'
'Label5
'
Me.Label5.AutoSize = True
Me.Label5.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Label5.Location = New System.Drawing.Point(12, 73)
Me.Label5.Name = "Label5"
Me.Label5.Size = New System.Drawing.Size(41, 15)
Me.Label5.TabIndex = 7
Me.Label5.Text = "VPath:"
'
'IconIndexText
'
Me.IconIndexText.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconIndexText.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.IconIndexText.Location = New System.Drawing.Point(315, 99)
Me.IconIndexText.Name = "IconIndexText"
Me.IconIndexText.Size = New System.Drawing.Size(60, 23)
Me.IconIndexText.TabIndex = 14
Me.IconIndexText.Text = "0"
'
'ShortNameText
'
Me.ShortNameText.Location = New System.Drawing.Point(60, 12)
Me.ShortNameText.Name = "ShortNameText"
Me.ShortNameText.Size = New System.Drawing.Size(170, 23)
Me.ShortNameText.TabIndex = 1
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Location = New System.Drawing.Point(12, 44)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(34, 15)
Me.Label4.TabIndex = 4
Me.Label4.Text = "Path:"
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(236, 15)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(62, 15)
Me.Label3.TabIndex = 2
Me.Label3.Text = "Full name:"
'
'Label12
'
Me.Label12.AutoSize = True
Me.Label12.Location = New System.Drawing.Point(12, 15)
Me.Label12.Name = "Label12"
Me.Label12.Size = New System.Drawing.Size(42, 15)
Me.Label12.TabIndex = 0
Me.Label12.Text = "Name:"
'
'CancelEditButton
'
Me.CancelEditButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CancelEditButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.CancelEditButton.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.CancelEditButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CancelEditButton.ImageIndex = 8
Me.CancelEditButton.ImageList = Me.SmallerIcons
Me.CancelEditButton.Location = New System.Drawing.Point(327, 189)
Me.CancelEditButton.Name = "CancelEditButton"
Me.CancelEditButton.Size = New System.Drawing.Size(75, 29)
Me.CancelEditButton.TabIndex = 24
Me.CancelEditButton.Text = "Cancel"
Me.CancelEditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CancelEditButton.UseVisualStyleBackColor = False
'
'FileBrowserPath
'
Me.FileBrowserPath.Filter = "Programs|*.exe;*.com;*.cmd;*.bat|All files|*.*"
Me.FileBrowserPath.Title = "Browse..."
'
'FileBrowserIcon
'
Me.FileBrowserIcon.Filter = "Icons|*.exe;*.dll;*.ico|All files|*.*"
Me.FileBrowserIcon.Title = "Browse..."
'
'FileBrowserVPath
'
Me.FileBrowserVPath.Filter = "Programs|*.exe;*.com;*.cmd;*.bat|All files|*.*"
Me.FileBrowserVPath.Title = "Browse..."
'
'SaveButton
'
Me.SaveButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SaveButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.SaveButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.SaveButton.ImageIndex = 0
Me.SaveButton.ImageList = Me.SmallerIcons
Me.SaveButton.Location = New System.Drawing.Point(407, 189)
Me.SaveButton.Name = "SaveButton"
Me.SaveButton.Size = New System.Drawing.Size(67, 29)
Me.SaveButton.TabIndex = 25
Me.SaveButton.Text = "Save"
Me.SaveButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.SaveButton.UseVisualStyleBackColor = False
'
'BrowseIconPath
'
Me.BrowseIconPath.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.BrowseIconPath.BackColor = System.Drawing.Color.WhiteSmoke
Me.BrowseIconPath.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.BrowseIconPath.ImageIndex = 4
Me.BrowseIconPath.ImageList = Me.SmallerIcons
Me.BrowseIconPath.Location = New System.Drawing.Point(449, 97)
Me.BrowseIconPath.Name = "BrowseIconPath"
Me.BrowseIconPath.Size = New System.Drawing.Size(27, 27)
Me.BrowseIconPath.TabIndex = 16
Me.BrowseIconPath.UseVisualStyleBackColor = False
'
'BrowseVPath
'
Me.BrowseVPath.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.BrowseVPath.BackColor = System.Drawing.Color.WhiteSmoke
Me.BrowseVPath.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.BrowseVPath.ImageIndex = 1
Me.BrowseVPath.ImageList = Me.SmallerIcons
Me.BrowseVPath.Location = New System.Drawing.Point(449, 67)
Me.BrowseVPath.Name = "BrowseVPath"
Me.BrowseVPath.Size = New System.Drawing.Size(27, 27)
Me.BrowseVPath.TabIndex = 10
Me.BrowseVPath.UseVisualStyleBackColor = False
'
'BrowsePath
'
Me.BrowsePath.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.BrowsePath.BackColor = System.Drawing.Color.WhiteSmoke
Me.BrowsePath.ImageIndex = 1
Me.BrowsePath.ImageList = Me.SmallerIcons
Me.BrowsePath.Location = New System.Drawing.Point(449, 38)
Me.BrowsePath.Name = "BrowsePath"
Me.BrowsePath.Size = New System.Drawing.Size(27, 27)
Me.BrowsePath.TabIndex = 6
Me.BrowsePath.UseVisualStyleBackColor = False
'
'FTAButton
'
Me.FTAButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.FTAButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.FTAButton.ImageIndex = 7
Me.FTAButton.ImageList = Me.SmallerIcons
Me.FTAButton.Location = New System.Drawing.Point(12, 189)
Me.FTAButton.Name = "FTAButton"
Me.FTAButton.Size = New System.Drawing.Size(172, 29)
Me.FTAButton.TabIndex = 23
Me.FTAButton.Text = "File type associations..."
Me.FTAButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.FTAButton.UseVisualStyleBackColor = False
'
'RemoteAppEditWindow
'
Me.AcceptButton = Me.SaveButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.CancelButton = Me.CancelEditButton
Me.ClientSize = New System.Drawing.Size(488, 230)
Me.Controls.Add(Me.FTAButton)
Me.Controls.Add(Me.CancelEditButton)
Me.Controls.Add(Me.SaveButton)
Me.Controls.Add(Me.BrowseIconPath)
Me.Controls.Add(Me.IconPathCopyButton)
Me.Controls.Add(Me.VPathCopyButton)
Me.Controls.Add(Me.TSWAbox)
Me.Controls.Add(Me.CommandLineOptionCombo)
Me.Controls.Add(Me.IconPathText)
Me.Controls.Add(Me.CommandLineText)
Me.Controls.Add(Me.Label11)
Me.Controls.Add(Me.Label10)
Me.Controls.Add(Me.Label8)
Me.Controls.Add(Me.VPathText)
Me.Controls.Add(Me.Label7)
Me.Controls.Add(Me.PathText)
Me.Controls.Add(Me.Label6)
Me.Controls.Add(Me.FullNameText)
Me.Controls.Add(Me.Label5)
Me.Controls.Add(Me.IconIndexText)
Me.Controls.Add(Me.ShortNameText)
Me.Controls.Add(Me.Label4)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.Label12)
Me.Controls.Add(Me.BrowseVPath)
Me.Controls.Add(Me.BrowsePath)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MaximumSize = New System.Drawing.Size(9000, 269)
Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(504, 269)
Me.Name = "RemoteAppEditWindow"
Me.Text = "RemoteAppEditWindow"
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Friend WithEvents BrowseIconPath As System.Windows.Forms.Button
Friend WithEvents IconPathCopyButton As System.Windows.Forms.Button
Friend WithEvents VPathCopyButton As System.Windows.Forms.Button
Friend WithEvents TSWAbox As System.Windows.Forms.ComboBox
Friend WithEvents CommandLineOptionCombo As System.Windows.Forms.ComboBox
Friend WithEvents IconPathText As System.Windows.Forms.TextBox
Friend WithEvents CommandLineText As System.Windows.Forms.TextBox
Friend WithEvents Label11 As System.Windows.Forms.Label
Friend WithEvents Label10 As System.Windows.Forms.Label
Friend WithEvents Label8 As System.Windows.Forms.Label
Friend WithEvents VPathText As System.Windows.Forms.TextBox
Friend WithEvents Label7 As System.Windows.Forms.Label
Friend WithEvents PathText As System.Windows.Forms.TextBox
Friend WithEvents Label6 As System.Windows.Forms.Label
Friend WithEvents FullNameText As System.Windows.Forms.TextBox
Friend WithEvents Label5 As System.Windows.Forms.Label
Friend WithEvents IconIndexText As System.Windows.Forms.TextBox
Friend WithEvents ShortNameText As System.Windows.Forms.TextBox
Friend WithEvents Label4 As System.Windows.Forms.Label
Friend WithEvents Label3 As System.Windows.Forms.Label
Friend WithEvents Label12 As System.Windows.Forms.Label
Friend WithEvents BrowseVPath As System.Windows.Forms.Button
Friend WithEvents BrowsePath As System.Windows.Forms.Button
Friend WithEvents SmallerIcons As System.Windows.Forms.ImageList
Friend WithEvents SaveButton As System.Windows.Forms.Button
Friend WithEvents CancelEditButton As System.Windows.Forms.Button
Friend WithEvents FileBrowserPath As System.Windows.Forms.OpenFileDialog
Friend WithEvents FileBrowserIcon As System.Windows.Forms.OpenFileDialog
Friend WithEvents FileBrowserVPath As System.Windows.Forms.OpenFileDialog
Friend WithEvents FTAButton As System.Windows.Forms.Button
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,231 @@
Imports RemoteAppLib
Public Class RemoteAppEditWindow
Private RemoteApp As New RemoteApp
Public Function EditRemoteApp(SelectedRemoteApp As RemoteApp) As RemoteApp
HelpSystem.SetupTips(Me)
RemoteApp = SelectedRemoteApp
Me.Text = "Properties of " & RemoteApp.Name
Me.Size = Me.MinimumSize
HelpSystem.SetupTips(Me)
Me.LoadValues()
Dim dlgResult = Me.ShowDialog()
RemoteAppMainWindow.ReloadApps()
Me.Dispose()
Return RemoteApp
End Function
Public Function CreateRemoteApp(Optional Advanced As Boolean = False) As RemoteApp
Me.Text = "New RemoteApp"
Me.Size = Me.MinimumSize
HelpSystem.SetupTips(Me)
Me.CommandLineOptionCombo.SelectedIndex = 1
Me.TSWAbox.SelectedIndex = 0
Me.FTAButton.Enabled = False
If Advanced Then
Me.ShowDialog()
Else
If DoBrowsePath() = True Then
SaveAndCloseOrWindow()
End If
End If
Me.Dispose()
Return RemoteApp
End Function
Private Sub SetToolTips()
Dim toolTip1 As New ToolTip()
' Set up the delays for the ToolTip.
toolTip1.AutoPopDelay = 5000
toolTip1.InitialDelay = 1000
toolTip1.ReshowDelay = 500
toolTip1.SetToolTip(Me.BrowseIconPath, "Select an icon")
toolTip1.SetToolTip(Me.BrowsePath, "Browse for application")
toolTip1.SetToolTip(Me.BrowseVPath, "Browse for application")
toolTip1.SetToolTip(Me.VPathCopyButton, "Copy Path into VPath")
toolTip1.SetToolTip(Me.IconPathCopyButton, "Copy Path into Icon path")
End Sub
Sub LoadValues()
Me.ShortNameText.Text = RemoteApp.Name
Me.CommandLineOptionCombo.SelectedIndex = RemoteApp.CommandLineOption
Me.FullNameText.Text = RemoteApp.FullName
Me.PathText.Text = RemoteApp.Path
Me.VPathText.Text = RemoteApp.VPath
Me.CommandLineText.Text = RemoteApp.CommandLine
Me.CommandLineOptionCombo.SelectedIndex = RemoteApp.CommandLineOption
Me.IconPathText.Text = RemoteApp.IconPath
Me.IconIndexText.Text = RemoteApp.IconIndex
Dim TSWA As Integer = 0
If RemoteApp.TSWA = True Then TSWA = 1
Me.TSWAbox.SelectedIndex = TSWA
Dim TheIcon = ReturnIcon(Me.IconPathText.Text, Val(Me.IconIndexText.Text), True)
If Not TheIcon Is Nothing Then
Me.Icon = TheIcon
Else
Me.Icon = RemoteAppMainWindow.Icon
End If
End Sub
Private Sub CancelEditButton_Click(sender As Object, e As EventArgs) Handles CancelEditButton.Click
Me.Close()
End Sub
Private Sub VPathCopyButton_Click(sender As Object, e As EventArgs) Handles VPathCopyButton.Click
Me.VPathText.Text = Me.PathText.Text
End Sub
Private Sub IconPathCopyButton_Click(sender As Object, e As EventArgs) Handles IconPathCopyButton.Click
Me.IconPathText.Text = Me.PathText.Text
End Sub
Private Sub BrowseVPath_Click(sender As Object, e As EventArgs) Handles BrowseVPath.Click
If My.Computer.FileSystem.FileExists(VPathText.Text) Then FileBrowserVPath.InitialDirectory = My.Computer.FileSystem.GetParentPath(VPathText.Text)
If FileBrowserVPath.ShowDialog() = Windows.Forms.DialogResult.OK Then Me.VPathText.Text = FileBrowserVPath.FileName
End Sub
Private Sub BrowseIconPath_Click(sender As Object, e As EventArgs) Handles BrowseIconPath.Click
IconPick()
End Sub
Private Sub IconPick()
Dim StartPath As String = GetSysDir() & "\shell32.dll"
Dim StartIndex As Integer = Val(Me.IconIndexText.Text)
If My.Computer.FileSystem.FileExists(IconPathText.Text) Then StartPath = IconPathText.Text
Dim PickedIcon = RemoteAppIconPicker.PickIcon(StartPath, StartIndex)
If Not PickedIcon.IconPath Is Nothing Then
Me.IconPathText.Text = PickedIcon.IconPath
Me.IconIndexText.Text = PickedIcon.IconIndex
End If
End Sub
Private Sub BrowsePath_Click(sender As Object, e As EventArgs) Handles BrowsePath.Click
DoBrowsePath()
End Sub
Private Function DoBrowsePath() As Boolean
DoBrowsePath = False
If My.Computer.FileSystem.FileExists(PathText.Text) Then FileBrowserPath.InitialDirectory = My.Computer.FileSystem.GetParentPath(PathText.Text)
If FileBrowserPath.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim FilePath = FileBrowserPath.FileName
Me.PathText.Text = FilePath
RemoteApp.Path = FilePath
If Me.VPathText.Text = "" Then RemoteApp.VPath = FilePath
If Me.IconPathText.Text = "" Then RemoteApp.IconPath = FilePath
If FilePath.ToLower.EndsWith(".exe") Then
Dim title = GetEXETitle(FilePath)
If Me.ShortNameText.Text = "" Then RemoteApp.Name = FixShortAppName(title)
If Me.FullNameText.Text = "" Then RemoteApp.FullName = title
End If
LoadValues()
DoBrowsePath = True
End If
End Function
Private Sub SaveRemoteApp(ShortName As String, FullName As String, Path As String, VPath As String, CommandLine As String, CommandLineSetting As Integer, IconPath As String, IconIndex As Integer, ShowInTSWA As Integer)
Dim SysApps As New SystemRemoteApps
If Not RemoteApp.Name Is Nothing Then If Not RemoteApp.Name = ShortName Then SysApps.RenameApp(RemoteApp.Name, ShortName)
RemoteApp.Name = ShortName
RemoteApp.FullName = FullName
RemoteApp.Path = Path
RemoteApp.VPath = VPath
RemoteApp.IconPath = IconPath
RemoteApp.IconIndex = IconIndex
RemoteApp.CommandLine = CommandLine
RemoteApp.CommandLineOption = CommandLineSetting
RemoteApp.TSWA = ShowInTSWA
SysApps.SaveApp(RemoteApp)
End Sub
Private Function DoesAppExist(AppName As String) As Boolean
Dim AppExists = False
Dim sra As New SystemRemoteApps
Dim AppCol As New RemoteAppCollection
AppCol = sra.GetAll
For Each App As RemoteApp In AppCol
If App.Name = AppName Then AppExists = True
Next
Return AppExists
End Function
Private Sub SaveButton_Click(sender As Object, e As EventArgs) Handles SaveButton.Click
SaveAndClose()
End Sub
Private Sub SaveAndCloseOrWindow()
If Me.ShortNameText.Text = "" Then
MessageBox.Show("Name must not be blank.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Me.ShowDialog()
ElseIf Me.FullNameText.Text = "" Then
MessageBox.Show("Full name must not be blank.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Me.ShowDialog()
ElseIf Me.PathText.Text = "" Then
MessageBox.Show("Path must not be blank.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Me.ShowDialog()
ElseIf Not Me.ShortNameText.Text = RemoteApp.Name And DoesAppExist(Me.ShortNameText.Text) Then
MessageBox.Show("A RemoteApp with the same name already exists.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Me.ShowDialog()
ElseIf Me.Text = "New RemoteApp" And DoesAppExist(Me.ShortNameText.Text) Then
MessageBox.Show("A RemoteApp with the same name already exists.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Me.ShowDialog()
Else
SaveRemoteApp(Me.ShortNameText.Text.Trim, Me.FullNameText.Text, Me.PathText.Text, Me.VPathText.Text, Me.CommandLineText.Text, Me.CommandLineOptionCombo.SelectedIndex, Me.IconPathText.Text, Val(IconIndexText.Text), Me.TSWAbox.SelectedIndex)
Me.Close()
End If
End Sub
Private Sub SaveAndClose()
If Me.ShortNameText.Text = "" Then
MessageBox.Show("Name must not be blank.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
ElseIf Me.FullNameText.Text = "" Then
MessageBox.Show("Full name must not be blank.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
ElseIf Me.PathText.Text = "" Then
MessageBox.Show("Path must not be blank.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
ElseIf Not Me.ShortNameText.Text = RemoteApp.Name And DoesAppExist(Me.ShortNameText.Text) Then
MessageBox.Show("A RemoteApp with the same name already exists.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
ElseIf Me.Text = "New RemoteApp" And DoesAppExist(Me.ShortNameText.Text) Then
MessageBox.Show("A RemoteApp with the same name already exists.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Else
SaveRemoteApp(Me.ShortNameText.Text.Trim, Me.FullNameText.Text, Me.PathText.Text, Me.VPathText.Text, Me.CommandLineText.Text, Me.CommandLineOptionCombo.SelectedIndex, Me.IconPathText.Text, Val(IconIndexText.Text), Me.TSWAbox.SelectedIndex)
Me.Close()
End If
End Sub
Private Sub IconIndexText_TextChanged(sender As Object, e As EventArgs) Handles IconIndexText.TextChanged
ValidateInteger(IconIndexText)
End Sub
Private Sub FTAButton_Click(sender As Object, e As EventArgs) Handles FTAButton.Click
RemoteAppFileTypeAssociation.EditFileTypes(RemoteApp)
End Sub
Private Sub ShortNameText_TextChanged(sender As Object, e As EventArgs) Handles ShortNameText.TextChanged
ValidateAppName(Me.ShortNameText)
End Sub
End Class

View File

@ -0,0 +1,231 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppFileTypeAssociation
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppFileTypeAssociation))
Me.FTAListView = New System.Windows.Forms.ListView()
Me.FileExtension = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.IconPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.IconIndex = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.Associated = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.CreateButton = New System.Windows.Forms.Button()
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.DeleteButton = New System.Windows.Forms.Button()
Me.EditButton = New System.Windows.Forms.Button()
Me.CloseButton = New System.Windows.Forms.Button()
Me.SetAssociationButton = New System.Windows.Forms.Button()
Me.SmallerIcons2 = New System.Windows.Forms.ImageList(Me.components)
Me.SuspendLayout()
'
'FTAListView
'
Me.FTAListView.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.FTAListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.FTAListView.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.FileExtension, Me.IconPath, Me.IconIndex, Me.Associated})
Me.FTAListView.FullRowSelect = True
Me.FTAListView.GridLines = True
Me.FTAListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
Me.FTAListView.HideSelection = False
Me.FTAListView.Location = New System.Drawing.Point(-1, -1)
Me.FTAListView.MultiSelect = False
Me.FTAListView.Name = "FTAListView"
Me.FTAListView.Size = New System.Drawing.Size(496, 164)
Me.FTAListView.Sorting = System.Windows.Forms.SortOrder.Ascending
Me.FTAListView.TabIndex = 0
Me.FTAListView.UseCompatibleStateImageBehavior = False
Me.FTAListView.View = System.Windows.Forms.View.Details
'
'FileExtension
'
Me.FileExtension.Text = "Extension"
Me.FileExtension.Width = 64
'
'IconPath
'
Me.IconPath.Text = "Icon Path"
Me.IconPath.Width = 305
'
'IconIndex
'
Me.IconIndex.Text = "Index"
Me.IconIndex.Width = 51
'
'Associated
'
Me.Associated.Text = "Association"
Me.Associated.Width = 76
'
'CreateButton
'
Me.CreateButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.CreateButton.AutoSize = True
Me.CreateButton.BackColor = System.Drawing.Color.Transparent
Me.CreateButton.FlatAppearance.BorderSize = 0
Me.CreateButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.CreateButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.CreateButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.CreateButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CreateButton.ImageIndex = 1
Me.CreateButton.ImageList = Me.SmallerIcons
Me.CreateButton.Location = New System.Drawing.Point(12, 169)
Me.CreateButton.Name = "CreateButton"
Me.CreateButton.Size = New System.Drawing.Size(29, 29)
Me.CreateButton.TabIndex = 1
Me.CreateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CreateButton.UseVisualStyleBackColor = False
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "properties.ico")
Me.SmallerIcons.Images.SetKeyName(1, "plus.ico")
Me.SmallerIcons.Images.SetKeyName(2, "minus.ico")
Me.SmallerIcons.Images.SetKeyName(3, "tick.ico")
Me.SmallerIcons.Images.SetKeyName(4, "flag2-add.ico")
Me.SmallerIcons.Images.SetKeyName(5, "settings-16.ico")
'
'DeleteButton
'
Me.DeleteButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.DeleteButton.AutoSize = True
Me.DeleteButton.BackColor = System.Drawing.Color.Transparent
Me.DeleteButton.Enabled = False
Me.DeleteButton.FlatAppearance.BorderSize = 0
Me.DeleteButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.DeleteButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.DeleteButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.DeleteButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.DeleteButton.ImageIndex = 2
Me.DeleteButton.ImageList = Me.SmallerIcons
Me.DeleteButton.Location = New System.Drawing.Point(48, 169)
Me.DeleteButton.Name = "DeleteButton"
Me.DeleteButton.Size = New System.Drawing.Size(29, 29)
Me.DeleteButton.TabIndex = 2
Me.DeleteButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.DeleteButton.UseVisualStyleBackColor = False
'
'EditButton
'
Me.EditButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.EditButton.AutoSize = True
Me.EditButton.BackColor = System.Drawing.Color.Transparent
Me.EditButton.Enabled = False
Me.EditButton.FlatAppearance.BorderSize = 0
Me.EditButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.EditButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.EditButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.EditButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.EditButton.ForeColor = System.Drawing.SystemColors.ControlText
Me.EditButton.ImageIndex = 0
Me.EditButton.ImageList = Me.SmallerIcons
Me.EditButton.Location = New System.Drawing.Point(84, 169)
Me.EditButton.Name = "EditButton"
Me.EditButton.Size = New System.Drawing.Size(29, 29)
Me.EditButton.TabIndex = 3
Me.EditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.EditButton.UseVisualStyleBackColor = False
'
'CloseButton
'
Me.CloseButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CloseButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.CloseButton.DialogResult = System.Windows.Forms.DialogResult.OK
Me.CloseButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CloseButton.ImageIndex = 3
Me.CloseButton.ImageList = Me.SmallerIcons
Me.CloseButton.Location = New System.Drawing.Point(415, 169)
Me.CloseButton.Name = "CloseButton"
Me.CloseButton.Size = New System.Drawing.Size(67, 29)
Me.CloseButton.TabIndex = 6
Me.CloseButton.Text = "OK"
Me.CloseButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CloseButton.UseVisualStyleBackColor = False
'
'SetAssociationButton
'
Me.SetAssociationButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.SetAssociationButton.AutoSize = True
Me.SetAssociationButton.BackColor = System.Drawing.Color.Transparent
Me.SetAssociationButton.Enabled = False
Me.SetAssociationButton.FlatAppearance.BorderSize = 0
Me.SetAssociationButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.SetAssociationButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.SetAssociationButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.SetAssociationButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.SetAssociationButton.ForeColor = System.Drawing.SystemColors.ControlText
Me.SetAssociationButton.ImageIndex = 4
Me.SetAssociationButton.ImageList = Me.SmallerIcons
Me.SetAssociationButton.Location = New System.Drawing.Point(119, 169)
Me.SetAssociationButton.Name = "SetAssociationButton"
Me.SetAssociationButton.Size = New System.Drawing.Size(29, 29)
Me.SetAssociationButton.TabIndex = 4
Me.SetAssociationButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.SetAssociationButton.UseVisualStyleBackColor = False
'
'SmallerIcons2
'
Me.SmallerIcons2.ImageStream = CType(resources.GetObject("SmallerIcons2.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons2.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons2.Images.SetKeyName(0, "cross.ico")
'
'RemoteAppFileTypeAssociation
'
Me.AcceptButton = Me.CloseButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.ClientSize = New System.Drawing.Size(494, 208)
Me.Controls.Add(Me.SetAssociationButton)
Me.Controls.Add(Me.CloseButton)
Me.Controls.Add(Me.CreateButton)
Me.Controls.Add(Me.DeleteButton)
Me.Controls.Add(Me.EditButton)
Me.Controls.Add(Me.FTAListView)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(510, 247)
Me.Name = "RemoteAppFileTypeAssociation"
Me.Text = "File Type Associations"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents FTAListView As System.Windows.Forms.ListView
Friend WithEvents FileExtension As System.Windows.Forms.ColumnHeader
Friend WithEvents IconPath As System.Windows.Forms.ColumnHeader
Friend WithEvents IconIndex As System.Windows.Forms.ColumnHeader
Friend WithEvents CreateButton As System.Windows.Forms.Button
Friend WithEvents DeleteButton As System.Windows.Forms.Button
Friend WithEvents EditButton As System.Windows.Forms.Button
Friend WithEvents CloseButton As System.Windows.Forms.Button
Friend WithEvents Associated As System.Windows.Forms.ColumnHeader
Friend WithEvents SetAssociationButton As System.Windows.Forms.Button
Friend WithEvents SmallerIcons As System.Windows.Forms.ImageList
Friend WithEvents SmallerIcons2 As System.Windows.Forms.ImageList
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,196 @@
Public Class RemoteAppFileTypeAssociation
Private RemoteApp As New RemoteAppLib.RemoteApp
Public Function EditFileTypes(SelectedRemoteApp As RemoteAppLib.RemoteApp) As RemoteAppLib.RemoteApp
RemoteApp = SelectedRemoteApp
Me.Text = "File type associations for " & RemoteApp.Name
HelpSystem.SetupTips(Me)
LoadFTAs()
Me.ShowDialog()
Me.Dispose()
Return RemoteApp
End Function
'Private Sub SetToolTips()
' Dim toolTip1 As New ToolTip()
' ' Set up the delays for the ToolTip.
' toolTip1.AutoPopDelay = 5000
' toolTip1.InitialDelay = 1000
' toolTip1.ReshowDelay = 500
' ' Force the ToolTip text to be displayed whether or not the form is active:
' ' toolTip1.ShowAlways = True
' toolTip1.SetToolTip(Me.CreateButton, "Create a new File Type Association")
' toolTip1.SetToolTip(Me.DeleteButton, "Delete selected File Type Association")
' toolTip1.SetToolTip(Me.EditButton, "Change icon of selected File Type Association")
'End Sub
Private Sub LoadFTAs()
FTAListView.Items.Clear()
If Not RemoteApp.FileTypeAssociations Is Nothing Then
For Each fta As RemoteAppLib.FileTypeAssociation In RemoteApp.FileTypeAssociations
Dim FTitem As New ListViewItem(fta.Extension)
Dim ftaStatus As String
If LocalFtaModule.DoesFTAExist(fta.Extension) Then
'FTA exists - created by another app
ftaStatus = "Existing"
If LocalFtaModule.IsFTAMine(fta.Extension) Then
'FTA exists - created by RemoteApp Tool
ftaStatus = "Yes"
End If
Else
'FTA does not exist
ftaStatus = "No"
End If
FTitem.SubItems.Add(fta.IconPath)
FTitem.SubItems.Add(fta.IconIndex)
FTitem.SubItems.Add(ftaStatus)
FTAListView.Items.Add(FTitem)
Next
End If
CheckSelection()
End Sub
Private Sub CreateButton_Click(sender As Object, e As EventArgs) Handles CreateButton.Click
If RemoteApp.FileTypeAssociations Is Nothing Then
Dim FTACol As New RemoteAppLib.FileTypeAssociationCollection
RemoteApp.FileTypeAssociations = FTACol
End If
Dim FTA As New RemoteAppLib.FileTypeAssociation
FTA = RemoteAppIconPicker.ManageFTA(RemoteApp.IconPath, 0)
Dim SameFTA As Boolean = False
If Not FTA.Extension Is Nothing Then
For Each RAFTA As RemoteAppLib.FileTypeAssociation In RemoteApp.FileTypeAssociations
If RAFTA.Extension = FTA.Extension Then SameFTA = True
Next
If Not SameFTA Then
RemoteApp.FileTypeAssociations.Add(FTA)
Else
MessageBox.Show("There is already an association for filetype: " & FTA.Extension, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
End If
End If
LoadFTAs()
End Sub
Private Sub FTAListView_DoubleClick(sender As Object, e As EventArgs) Handles FTAListView.DoubleClick
EditFTA()
End Sub
Private Sub FTAListView_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FTAListView.SelectedIndexChanged
CheckSelection()
End Sub
Private Sub CheckSelection()
If FTAListView.SelectedItems.Count > 0 Then
Me.EditButton.Enabled = True
Me.DeleteButton.Enabled = True
Me.SetAssociationButton.Enabled = True
Else
Me.EditButton.Enabled = False
Me.DeleteButton.Enabled = False
Me.SetAssociationButton.Enabled = False
End If
End Sub
Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click
Me.Close()
End Sub
Private Sub DeleteButton_Click(sender As Object, e As EventArgs) Handles DeleteButton.Click
Dim FileType = FTAListView.SelectedItems(0).Text
If MessageBox.Show("Are you sure you want to remove filetype:" & vbCrLf & "." & FileType & " ?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
Dim IconPath = FTAListView.SelectedItems(0).SubItems(0).Text
Dim IconIndex = FTAListView.SelectedItems(0).SubItems(1).Text
Dim FTAtoRemove As New RemoteAppLib.FileTypeAssociation
For Each FTA As RemoteAppLib.FileTypeAssociation In RemoteApp.FileTypeAssociations
If FTA.Extension = FileType Then FTAtoRemove = FTA
Next
RemoteApp.FileTypeAssociations.Remove(FTAtoRemove)
End If
LoadFTAs()
End Sub
Private Sub EditButton_Click(sender As Object, e As EventArgs) Handles EditButton.Click
EditFTA()
End Sub
Private Sub EditFTA()
Dim FTA As New RemoteAppLib.FileTypeAssociation
FTA = RemoteAppIconPicker.ManageFTA(Me.FTAListView.SelectedItems(0).SubItems(1).Text, Val(Me.FTAListView.SelectedItems(0).SubItems(2).Text), Me.FTAListView.SelectedItems(0).Text, True)
If Not FTA.Extension Is Nothing Then
Dim IconPath = FTAListView.SelectedItems(0).SubItems(0).Text
Dim IconIndex = FTAListView.SelectedItems(0).SubItems(1).Text
Dim FileType = FTAListView.SelectedItems(0).Text
Dim FTAtoRemove As New RemoteAppLib.FileTypeAssociation
For Each FTA2 As RemoteAppLib.FileTypeAssociation In RemoteApp.FileTypeAssociations
If FTA2.Extension = FileType Then FTAtoRemove = FTA2
Next
RemoteApp.FileTypeAssociations.Remove(FTAtoRemove)
RemoteApp.FileTypeAssociations.Add(FTA)
LoadFTAs()
End If
End Sub
Private Sub SetAssociationButton_Click(sender As Object, e As EventArgs) Handles SetAssociationButton.Click ' NEED TO SORT OUT EVERYTHING IN THIS SUB!!!
Dim fta As New RemoteAppLib.FileTypeAssociation
fta.Extension = FTAListView.SelectedItems(0).SubItems(0).Text
fta.IconPath = FTAListView.SelectedItems(0).SubItems(1).Text
fta.IconIndex = FTAListView.SelectedItems(0).SubItems(2).Text
Dim MsgBoxResult As Windows.Forms.DialogResult = Windows.Forms.DialogResult.Cancel
If LocalFtaModule.DoesFTAExist(fta.Extension) Then
'An existing association was found
If Not IsFTAMine(fta.Extension) Then
'FTA found and belongs to another application (replace?)
MsgBoxResult = MessageBox.Show("An association already exists on the local computer for filetype. " & _
"Would you like to replace it?" & vbCrLf & vbCrLf & _
"Warning: This association was created by another application. " & _
"Replacing it can cause problems. " & _
"If the existing association is working, there is no need to replace it.", _
"File Type Association", _
MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)
If MsgBoxResult = Windows.Forms.DialogResult.Yes Then _
LocalFtaModule.CreateFTA(fta, RemoteApp.Path, RemoteApp.Name, True)
Else
'FTA found and belongs to RemoteApp Tool (remove)
MsgBoxResult = MessageBox.Show("Are you sure you want to remove this file type association on the local computer?", _
"File Type Association", _
MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)
If MsgBoxResult = Windows.Forms.DialogResult.Yes Then _
LocalFtaModule.DeleteFTA(fta.Extension)
End If
Else
'FTA not found (create)
If LocalFtaModule.CreateFTA(fta, RemoteApp.Path, RemoteApp.Name) = True Then
MessageBox.Show("File type association created for " & fta.Extension & ".", "File Type Association", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("File type association not created. There was an error.", "File Type Association", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End If
Me.LoadFTAs()
End Sub
Private Sub CancelButton_Click(sender As Object, e As EventArgs)
Me.Close()
End Sub
End Class

View File

@ -0,0 +1,113 @@
Imports System.Text.RegularExpressions
Imports RemoteAppLib
Module RemoteAppFunction
Public Sub ValidateInteger(TheTextBox As TextBox)
Dim cloc = TheTextBox.SelectionStart
TheTextBox.Text = Val(TheTextBox.Text)
TheTextBox.Select(TheTextBox.Text.Length, 0)
TheTextBox.Select(cloc, 0)
End Sub
Public Sub ValidatePort(TheTextBox As TextBox)
Dim cloc = TheTextBox.SelectionStart
If Val(TheTextBox.Text) > 65535 Then
TheTextBox.Text = "65535"
cloc = TheTextBox.Text.Length
End If
TheTextBox.Text = Val(TheTextBox.Text)
TheTextBox.Select(TheTextBox.Text.Length, 0)
TheTextBox.Select(cloc, 0)
End Sub
Public Sub ValidateSeconds(TheTextBox As TextBox)
Dim cloc = TheTextBox.SelectionStart
If Val(TheTextBox.Text) > 2147483 Then
TheTextBox.Text = 2147483
cloc = TheTextBox.Text.Length
End If
TheTextBox.Text = Val(TheTextBox.Text)
TheTextBox.Select(TheTextBox.Text.Length, 0)
TheTextBox.Select(cloc, 0)
End Sub
Public Sub ValidateAppName(TheTextBox As TextBox)
ValidateTextBoxR(TheTextBox, "[^\p{L}0-9\-_"" ""]")
End Sub
Private Sub ValidateTextBoxR(TheTextBox As TextBox, regex As String)
Dim cloc = TheTextBox.SelectionStart
Dim rx As New Regex(regex)
If (rx.IsMatch(TheTextBox.Text)) Then
TheTextBox.Text = rx.Replace(TheTextBox.Text, "")
TheTextBox.Select(cloc - 1, 0)
Else
TheTextBox.Select(cloc, 0)
End If
End Sub
Public Function FixShortAppName(TheText As String)
If TheText <> "" Then
Dim rx As New Regex("[^\p{L}0-9\-_"" ""]")
If (rx.IsMatch(TheText)) Then
TheText = rx.Replace(TheText, "")
End If
End If
TheText = TheText.Trim
Return TheText
End Function
Public Sub ValidateDNSname(ByVal TheTextBox As TextBox)
' pattern matches any character that is NOT A-Z (allows upper and lower case alphabets)
Dim rx As New Regex("[^\p{L}0-9\-\.]")
If (rx.IsMatch(TheTextBox.Text)) Then
TheTextBox.Text = rx.Replace(TheTextBox.Text, "")
TheTextBox.Select(TheTextBox.Text.Length, 0)
End If
End Sub
Public Sub ValidateFileType(ByVal TheTextBox As TextBox)
' pattern matches any character that is NOT A-Z (allows upper and lower case alphabets)
Dim rx As New Regex("[^\p{L}0-9\-_\!\@\#\$\%\^\&\(\)\{\}\[\]\+\=\;\,\']")
If (rx.IsMatch(TheTextBox.Text)) Then
TheTextBox.Text = rx.Replace(TheTextBox.Text, "")
TheTextBox.Select(TheTextBox.Text.Length, 0)
End If
End Sub
Public Function GetAppBitmap(RemoteAppShortName As String)
On Error Resume Next
Dim AppKey As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications" & "\" & RemoteAppShortName
Dim TheRegKey = My.Computer.Registry.LocalMachine.OpenSubKey(AppKey)
Dim TheIcon = ReturnIcon("", 0).ToBitmap
If Not TheRegKey Is Nothing Then
Dim IconPath = TheRegKey.GetValue("IconPath", "")
Dim IconIndex = TheRegKey.GetValue("IconIndex", "")
TheIcon = ReturnIcon(IconPath, IconIndex).ToBitmap
End If
Return TheIcon
End Function
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Function GetSysDir() As String
Return Environment.SystemDirectory.ToString
End Function
Public Sub DeleteFiles(FilesArray As ArrayList)
For Each dFile In FilesArray
If My.Computer.FileSystem.FileExists(dFile) Then My.Computer.FileSystem.DeleteFile(dFile)
Next
End Sub
Public Function GetEXETitle(exePath As String)
Dim pname = System.Diagnostics.FileVersionInfo.GetVersionInfo(exePath).FileDescription
If pname = "" Then pname = Left(My.Computer.FileSystem.GetFileInfo(exePath).Name, My.Computer.FileSystem.GetFileInfo(exePath).Name.Length - 4)
Return pname
End Function
End Module

View File

@ -0,0 +1,220 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppHostOptions
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppHostOptions))
Me.TimeoutDisconnectedCheckBox = New System.Windows.Forms.CheckBox()
Me.DisableAllowListCheckBox = New System.Windows.Forms.CheckBox()
Me.DisconnectTimeTextBox = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.TimeoutIdleCheckBox = New System.Windows.Forms.CheckBox()
Me.IdleTimeTextBox = New System.Windows.Forms.TextBox()
Me.Label2 = New System.Windows.Forms.Label()
Me.LogoffWhenTimoutCheckBox = New System.Windows.Forms.CheckBox()
Me.SaveButton = New System.Windows.Forms.Button()
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.Label3 = New System.Windows.Forms.Label()
Me.CancelEditButton = New System.Windows.Forms.Button()
Me.AllowUnlistedRemoteProgramsCheckBox = New System.Windows.Forms.CheckBox()
Me.SuspendLayout()
'
'TimeoutDisconnectedCheckBox
'
Me.TimeoutDisconnectedCheckBox.AutoSize = True
Me.TimeoutDisconnectedCheckBox.Location = New System.Drawing.Point(14, 64)
Me.TimeoutDisconnectedCheckBox.Name = "TimeoutDisconnectedCheckBox"
Me.TimeoutDisconnectedCheckBox.Size = New System.Drawing.Size(212, 19)
Me.TimeoutDisconnectedCheckBox.TabIndex = 2
Me.TimeoutDisconnectedCheckBox.Text = "Timeout for disconnected sessions:"
Me.TimeoutDisconnectedCheckBox.UseVisualStyleBackColor = True
'
'DisableAllowListCheckBox
'
Me.DisableAllowListCheckBox.AutoSize = True
Me.DisableAllowListCheckBox.Location = New System.Drawing.Point(14, 14)
Me.DisableAllowListCheckBox.Name = "DisableAllowListCheckBox"
Me.DisableAllowListCheckBox.Size = New System.Drawing.Size(137, 19)
Me.DisableAllowListCheckBox.TabIndex = 0
Me.DisableAllowListCheckBox.Text = "Disable AppAllowList"
Me.DisableAllowListCheckBox.UseVisualStyleBackColor = True
'
'DisconnectTimeTextBox
'
Me.DisconnectTimeTextBox.Location = New System.Drawing.Point(245, 62)
Me.DisconnectTimeTextBox.MaxLength = 8
Me.DisconnectTimeTextBox.Name = "DisconnectTimeTextBox"
Me.DisconnectTimeTextBox.Size = New System.Drawing.Size(83, 23)
Me.DisconnectTimeTextBox.TabIndex = 3
Me.DisconnectTimeTextBox.Text = "0"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(336, 66)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(50, 15)
Me.Label1.TabIndex = 4
Me.Label1.Text = "seconds"
'
'TimeoutIdleCheckBox
'
Me.TimeoutIdleCheckBox.AutoSize = True
Me.TimeoutIdleCheckBox.Location = New System.Drawing.Point(14, 91)
Me.TimeoutIdleCheckBox.Name = "TimeoutIdleCheckBox"
Me.TimeoutIdleCheckBox.Size = New System.Drawing.Size(160, 19)
Me.TimeoutIdleCheckBox.TabIndex = 5
Me.TimeoutIdleCheckBox.Text = "Timeout for idle sessions:"
Me.TimeoutIdleCheckBox.UseVisualStyleBackColor = True
'
'IdleTimeTextBox
'
Me.IdleTimeTextBox.Location = New System.Drawing.Point(189, 89)
Me.IdleTimeTextBox.MaxLength = 8
Me.IdleTimeTextBox.Name = "IdleTimeTextBox"
Me.IdleTimeTextBox.Size = New System.Drawing.Size(83, 23)
Me.IdleTimeTextBox.TabIndex = 6
Me.IdleTimeTextBox.Text = "0"
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(280, 91)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(50, 15)
Me.Label2.TabIndex = 7
Me.Label2.Text = "seconds"
'
'LogoffWhenTimoutCheckBox
'
Me.LogoffWhenTimoutCheckBox.AutoSize = True
Me.LogoffWhenTimoutCheckBox.Location = New System.Drawing.Point(14, 117)
Me.LogoffWhenTimoutCheckBox.Name = "LogoffWhenTimoutCheckBox"
Me.LogoffWhenTimoutCheckBox.Size = New System.Drawing.Size(262, 19)
Me.LogoffWhenTimoutCheckBox.TabIndex = 8
Me.LogoffWhenTimoutCheckBox.Text = "Logoff sessions when time limits are reached"
Me.LogoffWhenTimoutCheckBox.UseVisualStyleBackColor = True
'
'SaveButton
'
Me.SaveButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SaveButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.SaveButton.FlatAppearance.BorderSize = 0
Me.SaveButton.ImageIndex = 0
Me.SaveButton.ImageList = Me.SmallerIcons
Me.SaveButton.Location = New System.Drawing.Point(334, 190)
Me.SaveButton.Name = "SaveButton"
Me.SaveButton.Size = New System.Drawing.Size(67, 29)
Me.SaveButton.TabIndex = 11
Me.SaveButton.Text = "Save"
Me.SaveButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.SaveButton.UseVisualStyleBackColor = False
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "favorites_16x16.png")
Me.SmallerIcons.Images.SetKeyName(1, "cross.ico")
'
'Label3
'
Me.Label3.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Label3.ForeColor = System.Drawing.Color.Maroon
Me.Label3.Location = New System.Drawing.Point(11, 145)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(385, 33)
Me.Label3.TabIndex = 9
Me.Label3.Text = "Note: Settings here will be overridden by local policy and group policy. Some set" & _
"tings require a reboot."
'
'CancelEditButton
'
Me.CancelEditButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CancelEditButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.CancelEditButton.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.CancelEditButton.ImageIndex = 1
Me.CancelEditButton.ImageList = Me.SmallerIcons
Me.CancelEditButton.Location = New System.Drawing.Point(253, 190)
Me.CancelEditButton.Name = "CancelEditButton"
Me.CancelEditButton.Size = New System.Drawing.Size(75, 29)
Me.CancelEditButton.TabIndex = 10
Me.CancelEditButton.Text = "Cancel"
Me.CancelEditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CancelEditButton.UseVisualStyleBackColor = False
'
'AllowUnlistedRemoteProgramsCheckBox
'
Me.AllowUnlistedRemoteProgramsCheckBox.AutoSize = True
Me.AllowUnlistedRemoteProgramsCheckBox.Location = New System.Drawing.Point(14, 39)
Me.AllowUnlistedRemoteProgramsCheckBox.Name = "AllowUnlistedRemoteProgramsCheckBox"
Me.AllowUnlistedRemoteProgramsCheckBox.Size = New System.Drawing.Size(200, 19)
Me.AllowUnlistedRemoteProgramsCheckBox.TabIndex = 1
Me.AllowUnlistedRemoteProgramsCheckBox.Text = "Allow Unlisted Remote Programs"
Me.AllowUnlistedRemoteProgramsCheckBox.UseVisualStyleBackColor = True
'
'RemoteAppHostOptions
'
Me.AcceptButton = Me.SaveButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.CancelButton = Me.CancelEditButton
Me.ClientSize = New System.Drawing.Size(413, 231)
Me.Controls.Add(Me.SaveButton)
Me.Controls.Add(Me.CancelEditButton)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.IdleTimeTextBox)
Me.Controls.Add(Me.DisconnectTimeTextBox)
Me.Controls.Add(Me.AllowUnlistedRemoteProgramsCheckBox)
Me.Controls.Add(Me.DisableAllowListCheckBox)
Me.Controls.Add(Me.LogoffWhenTimoutCheckBox)
Me.Controls.Add(Me.TimeoutIdleCheckBox)
Me.Controls.Add(Me.TimeoutDisconnectedCheckBox)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "RemoteAppHostOptions"
Me.Text = "Host Options"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents TimeoutDisconnectedCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents DisableAllowListCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents DisconnectTimeTextBox As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents TimeoutIdleCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents IdleTimeTextBox As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents LogoffWhenTimoutCheckBox As System.Windows.Forms.CheckBox
Friend WithEvents SaveButton As System.Windows.Forms.Button
Friend WithEvents SmallerIcons As System.Windows.Forms.ImageList
Friend WithEvents Label3 As System.Windows.Forms.Label
Friend WithEvents CancelEditButton As System.Windows.Forms.Button
Friend WithEvents AllowUnlistedRemoteProgramsCheckBox As System.Windows.Forms.CheckBox
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,139 @@
Public Class RemoteAppHostOptions
Private Sub DisconnectTimeTextBox_TextChanged(sender As Object, e As EventArgs) Handles DisconnectTimeTextBox.TextChanged
ValidateSeconds(Me.DisconnectTimeTextBox)
End Sub
Private Sub IdleTimeTextBox_TextChanged(sender As Object, e As EventArgs) Handles IdleTimeTextBox.TextChanged
ValidateSeconds(Me.IdleTimeTextBox)
End Sub
Private Sub SaveButton_Click(sender As Object, e As EventArgs) Handles SaveButton.Click
Dim PolicyKeyStringMS = "SOFTWARE\Policies\Microsoft"
Dim PolicyKeyString = "SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"
Dim PolicyKey As Microsoft.Win32.RegistryKey
'Create policy reg keys
Dim PolicyKeyMS = My.Computer.Registry.LocalMachine.OpenSubKey(PolicyKeyStringMS, True)
Dim PolicyKeyWNT = PolicyKeyMS.CreateSubKey("Windows NT")
Dim PolicyKeyTS = PolicyKeyWNT.CreateSubKey("Terminal Services")
PolicyKey = My.Computer.Registry.LocalMachine.OpenSubKey(PolicyKeyString, True)
If Me.DisableAllowListCheckBox.Checked Then
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList", "fDisabledAllowList", "1", Microsoft.Win32.RegistryValueKind.DWord)
Else
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList", "fDisabledAllowList", "0", Microsoft.Win32.RegistryValueKind.DWord)
End If
If Me.AllowUnlistedRemoteProgramsCheckBox.Checked Then
PolicyKey.SetValue("fAllowUnlistedRemotePrograms", 1, Microsoft.Win32.RegistryValueKind.DWord)
Else
PolicyKey.DeleteValue("fAllowUnlistedRemotePrograms", False)
End If
If Me.TimeoutDisconnectedCheckBox.Checked Then
PolicyKey.SetValue("MaxDisconnectionTime", Val(DisconnectTimeTextBox.Text) * 1000, Microsoft.Win32.RegistryValueKind.DWord)
Else
PolicyKey.DeleteValue("MaxDisconnectionTime", False)
End If
If Me.TimeoutIdleCheckBox.Checked Then
PolicyKey.SetValue("MaxIdleTime", Val(IdleTimeTextBox.Text) * 1000, Microsoft.Win32.RegistryValueKind.DWord)
Else
PolicyKey.DeleteValue("MaxIdleTime", False)
End If
If Me.LogoffWhenTimoutCheckBox.Checked Then
PolicyKey.SetValue("fResetBroken", "1", Microsoft.Win32.RegistryValueKind.DWord)
Else
PolicyKey.DeleteValue("fResetBroken", False)
End If
Me.Close()
End Sub
Public Sub SetValues()
On Error Resume Next
Dim PolicyKeyString = "SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"
Dim PolicyKey = My.Computer.Registry.LocalMachine.OpenSubKey(PolicyKeyString, False)
Me.DisconnectTimeTextBox.Text = "0"
Me.IdleTimeTextBox.Text = "0"
If Val(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList", "fDisabledAllowList", "")) = 1 Then
Me.DisableAllowListCheckBox.Checked = True
Else
Me.DisableAllowListCheckBox.Checked = False
End If
Dim MaxDisconnectionTime = -1
MaxDisconnectionTime = PolicyKey.GetValue("MaxDisconnectionTime", -1)
If Not MaxDisconnectionTime = -1 Then
Me.TimeoutDisconnectedCheckBox.Checked = True
Me.DisconnectTimeTextBox.Text = MaxDisconnectionTime / 1000
Else
Me.TimeoutDisconnectedCheckBox.Checked = False
End If
Dim MaxIdleTime = -1
MaxIdleTime = PolicyKey.GetValue("MaxIdleTime", -1)
If Not MaxIdleTime = -1 Then
Me.TimeoutIdleCheckBox.Checked = True
Me.IdleTimeTextBox.Text = MaxIdleTime / 1000
Else
Me.TimeoutIdleCheckBox.Checked = False
End If
Dim fResetBroken = PolicyKey.GetValue("fResetBroken")
If Not fResetBroken = Nothing Then
Me.LogoffWhenTimoutCheckBox.Checked = True
Else
Me.LogoffWhenTimoutCheckBox.Checked = False
End If
Dim fAllowUnlistedRemotePrograms = PolicyKey.GetValue("fAllowUnlistedRemotePrograms")
If Not fAllowUnlistedRemotePrograms = Nothing Then
Me.AllowUnlistedRemoteProgramsCheckBox.Checked = True
Else
Me.AllowUnlistedRemoteProgramsCheckBox.Checked = False
End If
If Me.TimeoutDisconnectedCheckBox.Checked = True Then
Me.DisconnectTimeTextBox.Enabled = True
Else
Me.DisconnectTimeTextBox.Enabled = False
End If
If Me.TimeoutIdleCheckBox.Checked = True Then
Me.IdleTimeTextBox.Enabled = True
Else
Me.IdleTimeTextBox.Enabled = False
End If
End Sub
Private Sub TimeoutDisconnectedCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles TimeoutDisconnectedCheckBox.CheckedChanged
If Me.TimeoutDisconnectedCheckBox.Checked = True Then
Me.DisconnectTimeTextBox.Enabled = True
Else
Me.DisconnectTimeTextBox.Enabled = False
End If
End Sub
Private Sub TimeoutIdleCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles TimeoutIdleCheckBox.CheckedChanged
If Me.TimeoutIdleCheckBox.Checked = True Then
Me.IdleTimeTextBox.Enabled = True
Else
Me.IdleTimeTextBox.Enabled = False
End If
End Sub
Private Sub CancelEditButton_Click(sender As Object, e As EventArgs) Handles CancelEditButton.Click
Me.Close()
End Sub
End Class

View File

@ -0,0 +1,278 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppIconPicker
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppIconPicker))
Me.IconList = New System.Windows.Forms.ListView()
Me.ShortName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.Title = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.Path = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.VPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.RequiredCommandLine = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.CommandLineSetting = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.IconPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.IconIndex = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.SecurityDescriptor = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ShowInTSWA = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.BrowseButton = New System.Windows.Forms.Button()
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.IconPathTextBox = New System.Windows.Forms.TextBox()
Me.IconIndexTextBox = New System.Windows.Forms.TextBox()
Me.FileBrowserIcon = New System.Windows.Forms.OpenFileDialog()
Me.CancelEditButton = New System.Windows.Forms.Button()
Me.OKButton = New System.Windows.Forms.Button()
Me.FileTypeLabel = New System.Windows.Forms.Label()
Me.FileTypeTextBox = New System.Windows.Forms.TextBox()
Me.IconIndexLabel = New System.Windows.Forms.Label()
Me.SmallIcons = New System.Windows.Forms.ImageList(Me.components)
Me.SuspendLayout()
'
'IconList
'
Me.IconList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ShortName, Me.Title, Me.Path, Me.VPath, Me.RequiredCommandLine, Me.CommandLineSetting, Me.IconPath, Me.IconIndex, Me.SecurityDescriptor, Me.ShowInTSWA})
Me.IconList.GridLines = True
Me.IconList.HideSelection = False
Me.IconList.LargeImageList = Me.SmallIcons
Me.IconList.Location = New System.Drawing.Point(16, 41)
Me.IconList.MultiSelect = False
Me.IconList.Name = "IconList"
Me.IconList.Size = New System.Drawing.Size(471, 143)
Me.IconList.SmallImageList = Me.SmallIcons
Me.IconList.TabIndex = 4
Me.IconList.UseCompatibleStateImageBehavior = False
'
'ShortName
'
Me.ShortName.Text = "ShortName"
Me.ShortName.Width = 200
'
'Title
'
Me.Title.Text = "Name"
'
'Path
'
Me.Path.Text = "Path"
'
'VPath
'
Me.VPath.Text = "VPath"
'
'RequiredCommandLine
'
Me.RequiredCommandLine.Text = "RequiredCommandLine"
'
'CommandLineSetting
'
Me.CommandLineSetting.Text = "CommandLineSetting"
'
'IconPath
'
Me.IconPath.Text = "IconPath"
'
'IconIndex
'
Me.IconIndex.Text = "IconIndex"
'
'SecurityDescriptor
'
Me.SecurityDescriptor.Text = "SecurityDescriptor"
'
'ShowInTSWA
'
Me.ShowInTSWA.Text = "ShowInTSWA"
'
'BrowseButton
'
Me.BrowseButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.BrowseButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.BrowseButton.ImageIndex = 0
Me.BrowseButton.ImageList = Me.SmallerIcons
Me.BrowseButton.Location = New System.Drawing.Point(14, 8)
Me.BrowseButton.Name = "BrowseButton"
Me.BrowseButton.Size = New System.Drawing.Size(82, 29)
Me.BrowseButton.TabIndex = 0
Me.BrowseButton.Text = "Browse..."
Me.BrowseButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.BrowseButton.UseVisualStyleBackColor = False
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "folder_16x16.png")
Me.SmallerIcons.Images.SetKeyName(1, "tick.ico")
Me.SmallerIcons.Images.SetKeyName(2, "cross.ico")
Me.SmallerIcons.Images.SetKeyName(3, "settings-16.ico")
'
'IconPathTextBox
'
Me.IconPathTextBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconPathTextBox.Location = New System.Drawing.Point(103, 12)
Me.IconPathTextBox.Name = "IconPathTextBox"
Me.IconPathTextBox.ReadOnly = True
Me.IconPathTextBox.Size = New System.Drawing.Size(267, 23)
Me.IconPathTextBox.TabIndex = 1
'
'IconIndexTextBox
'
Me.IconIndexTextBox.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconIndexTextBox.Location = New System.Drawing.Point(420, 12)
Me.IconIndexTextBox.Name = "IconIndexTextBox"
Me.IconIndexTextBox.ReadOnly = True
Me.IconIndexTextBox.Size = New System.Drawing.Size(67, 23)
Me.IconIndexTextBox.TabIndex = 3
Me.IconIndexTextBox.Visible = False
'
'FileBrowserIcon
'
Me.FileBrowserIcon.Filter = "Icons|*.exe;*.dll;*.ico|All files|*.*"
Me.FileBrowserIcon.Title = "Browse..."
'
'CancelEditButton
'
Me.CancelEditButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CancelEditButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.CancelEditButton.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.CancelEditButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CancelEditButton.ImageIndex = 2
Me.CancelEditButton.ImageList = Me.SmallerIcons
Me.CancelEditButton.Location = New System.Drawing.Point(339, 190)
Me.CancelEditButton.Name = "CancelEditButton"
Me.CancelEditButton.Size = New System.Drawing.Size(75, 29)
Me.CancelEditButton.TabIndex = 7
Me.CancelEditButton.Text = "Cancel"
Me.CancelEditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CancelEditButton.UseVisualStyleBackColor = False
'
'OKButton
'
Me.OKButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.OKButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK
Me.OKButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.OKButton.ImageIndex = 1
Me.OKButton.ImageList = Me.SmallerIcons
Me.OKButton.Location = New System.Drawing.Point(420, 190)
Me.OKButton.Name = "OKButton"
Me.OKButton.Size = New System.Drawing.Size(67, 29)
Me.OKButton.TabIndex = 8
Me.OKButton.Text = "OK"
Me.OKButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.OKButton.UseVisualStyleBackColor = False
'
'FileTypeLabel
'
Me.FileTypeLabel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.FileTypeLabel.AutoSize = True
Me.FileTypeLabel.Location = New System.Drawing.Point(12, 197)
Me.FileTypeLabel.Name = "FileTypeLabel"
Me.FileTypeLabel.Size = New System.Drawing.Size(66, 15)
Me.FileTypeLabel.TabIndex = 5
Me.FileTypeLabel.Text = "File type: ."
Me.FileTypeLabel.Visible = False
'
'FileTypeTextBox
'
Me.FileTypeTextBox.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.FileTypeTextBox.Location = New System.Drawing.Point(76, 194)
Me.FileTypeTextBox.Name = "FileTypeTextBox"
Me.FileTypeTextBox.Size = New System.Drawing.Size(80, 23)
Me.FileTypeTextBox.TabIndex = 6
Me.FileTypeTextBox.Text = "xyz"
Me.FileTypeTextBox.Visible = False
'
'IconIndexLabel
'
Me.IconIndexLabel.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.IconIndexLabel.AutoSize = True
Me.IconIndexLabel.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.IconIndexLabel.Location = New System.Drawing.Point(376, 15)
Me.IconIndexLabel.Name = "IconIndexLabel"
Me.IconIndexLabel.Size = New System.Drawing.Size(38, 15)
Me.IconIndexLabel.TabIndex = 2
Me.IconIndexLabel.Text = "Index:"
Me.IconIndexLabel.Visible = False
'
'SmallIcons
'
Me.SmallIcons.ImageStream = CType(resources.GetObject("SmallIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallIcons.Images.SetKeyName(0, "smallicons.ico")
'
'RemoteAppIconPicker
'
Me.AcceptButton = Me.OKButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.CancelButton = Me.CancelEditButton
Me.ClientSize = New System.Drawing.Size(499, 231)
Me.Controls.Add(Me.IconIndexLabel)
Me.Controls.Add(Me.CancelEditButton)
Me.Controls.Add(Me.OKButton)
Me.Controls.Add(Me.IconIndexTextBox)
Me.Controls.Add(Me.IconPathTextBox)
Me.Controls.Add(Me.BrowseButton)
Me.Controls.Add(Me.IconList)
Me.Controls.Add(Me.FileTypeTextBox)
Me.Controls.Add(Me.FileTypeLabel)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(515, 270)
Me.Name = "RemoteAppIconPicker"
Me.Text = "RemoteAppIconPicker"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents IconList As System.Windows.Forms.ListView
Friend WithEvents ShortName As System.Windows.Forms.ColumnHeader
Friend WithEvents Title As System.Windows.Forms.ColumnHeader
Friend WithEvents Path As System.Windows.Forms.ColumnHeader
Friend WithEvents VPath As System.Windows.Forms.ColumnHeader
Friend WithEvents RequiredCommandLine As System.Windows.Forms.ColumnHeader
Friend WithEvents CommandLineSetting As System.Windows.Forms.ColumnHeader
Friend WithEvents IconPath As System.Windows.Forms.ColumnHeader
Friend WithEvents IconIndex As System.Windows.Forms.ColumnHeader
Friend WithEvents SecurityDescriptor As System.Windows.Forms.ColumnHeader
Friend WithEvents ShowInTSWA As System.Windows.Forms.ColumnHeader
Friend WithEvents BrowseButton As System.Windows.Forms.Button
Friend WithEvents IconPathTextBox As System.Windows.Forms.TextBox
Friend WithEvents IconIndexTextBox As System.Windows.Forms.TextBox
Friend WithEvents FileBrowserIcon As System.Windows.Forms.OpenFileDialog
Friend WithEvents CancelEditButton As System.Windows.Forms.Button
Friend WithEvents OKButton As System.Windows.Forms.Button
Friend WithEvents FileTypeLabel As System.Windows.Forms.Label
Friend WithEvents FileTypeTextBox As System.Windows.Forms.TextBox
Friend WithEvents SmallerIcons As System.Windows.Forms.ImageList
Friend WithEvents IconIndexLabel As System.Windows.Forms.Label
Friend WithEvents SmallIcons As System.Windows.Forms.ImageList
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,158 @@
Public Class RemoteAppIconPicker
Dim NoValidate As Boolean = False
Public Function PickIcon(DefaultPath As String, Optional DefaultIndex As Integer = 0) As RemoteAppLib.IconSelection
Me.FileTypeLabel.Visible = False
Me.FileTypeTextBox.Visible = False
Me.IconIndexLabel.Visible = False
Me.IconIndexTextBox.Visible = False
Me.Text = "Select Icon"
Me.IconPathTextBox.Text = DefaultPath
Me.IconIndexTextBox.Text = DefaultIndex.ToString
LoadIcons()
Dim IconPick As New RemoteAppLib.IconSelection
If Me.ShowDialog() = Windows.Forms.DialogResult.OK Then
IconPick.IconPath = Me.IconPathTextBox.Text
IconPick.IconIndex = Me.IconIndexTextBox.Text
End If
Return IconPick
Me.Dispose()
End Function
Public Function ManageFTA(DefaultPath As String, Optional DefaultIndex As Integer = 0, Optional FileType As String = ".xyz", Optional IsEdit As Boolean = False) As RemoteAppLib.FileTypeAssociation
Dim FTA As New RemoteAppLib.FileTypeAssociation
Me.FileTypeLabel.Visible = True
Me.FileTypeTextBox.Visible = True
Me.IconIndexLabel.Visible = True
Me.IconIndexTextBox.Visible = True
Me.IconIndexTextBox.ReadOnly = True
If IsEdit = True Then
FileTypeTextBox.ReadOnly = True
Else
FileTypeTextBox.ReadOnly = False
End If
Me.Text = "File Type"
Me.FileTypeTextBox.Text = FileType
Me.IconPathTextBox.Text = DefaultPath
Me.IconIndexTextBox.Text = DefaultIndex
LoadIcons()
If Me.ShowDialog = Windows.Forms.DialogResult.OK Then
FTA.Extension = Me.FileTypeTextBox.Text
FTA.IconPath = Me.IconPathTextBox.Text
FTA.IconIndex = Me.IconIndexTextBox.Text
End If
Me.Dispose()
Return FTA
End Function
Private Function LoadIcons() As Boolean
Me.IconList.Clear()
Me.SmallIcons.Images.Clear()
Dim IconError As Boolean = False
Me.IconIndexLabel.Visible = True
Me.IconIndexTextBox.Visible = True
If My.Computer.FileSystem.FileExists(Me.IconPathTextBox.Text) Then
Dim mIcon As New IconLib.MultiIcon
Dim IconIndex As Integer = 0
Try
mIcon.Load(Me.IconPathTextBox.Text)
Me.IconIndexTextBox.ReadOnly = True
Catch Ex As Exception
IconError = True
NoValidate = True
Me.OKButton.Enabled = True
MessageBox.Show("There was an error loading icons from:" & vbCrLf & Me.IconPathTextBox.Text & vbCrLf & "Icons may still be usable, but you can not select one using the icon picker.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Me.IconIndexTextBox.Text = "0"
Me.IconIndexTextBox.ReadOnly = False
End Try
If Not IconError Then
NoValidate = False
For Each sIcon In mIcon
Dim IconKey = IconIndex
Dim IconItem As New ListViewItem(IconKey)
Dim fiImage As IconLib.IconImage = sIcon.Item(0)
For Each iImage In sIcon
If iImage.Icon.Width = 32 Then
Select Case iImage.ColorsInPalette
Case 0
fiImage = iImage
Case Else
If iImage.ColorsInPalette > fiImage.ColorsInPalette Then fiImage = iImage
End Select
If iImage.ColorsInPalette = 0 Then fiImage = iImage
End If
Next
Dim TheBitmap = fiImage.Icon.ToBitmap
Me.SmallIcons.Images.Add(IconKey, TheBitmap)
IconItem.ImageKey = IconKey
IconList.Items.Add(IconItem)
IconIndex += 1
Next
If Not NoValidate Then Me.OKButton.Enabled = False
End If
End If
Return IconError
End Function
Private Sub IconList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles IconList.SelectedIndexChanged
CheckSelection()
End Sub
Private Sub CheckSelection()
If Me.IconList.SelectedItems.Count > 0 Then
'something is selected
If Not FileTypeTextBox.Text = "" Then Me.OKButton.Enabled = True
Me.IconIndexTextBox.Text = Me.IconList.SelectedItems(0).Text
Else
'nothing is selected
If Not NoValidate Then Me.OKButton.Enabled = False
Me.IconIndexTextBox.Text = "0"
End If
End Sub
Private Sub BrowseButton_Click(sender As Object, e As EventArgs) Handles BrowseButton.Click
If My.Computer.FileSystem.FileExists(Me.IconPathTextBox.Text) Then _
Me.FileBrowserIcon.InitialDirectory = My.Computer.FileSystem.GetParentPath(Me.IconPathTextBox.Text)
If FileBrowserIcon.ShowDialog() = Windows.Forms.DialogResult.OK Then
Me.IconPathTextBox.Text = FileBrowserIcon.FileName
LoadIcons()
End If
End Sub
Private Sub FileTypeTextBox_TextChanged(sender As Object, e As EventArgs) Handles FileTypeTextBox.TextChanged
ValidateFileType(FileTypeTextBox)
If Me.FileTypeTextBox.Text = "" Then Me.OKButton.Enabled = False Else If Me.IconList.SelectedItems.Count = 1 Then Me.OKButton.Enabled = True
End Sub
Private Sub IconIndexTextBox_TextChanged(sender As Object, e As EventArgs) Handles IconIndexTextBox.TextChanged
ValidateInteger(IconIndexTextBox)
End Sub
End Class

View File

@ -0,0 +1,391 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RemoteAppMainWindow
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RemoteAppMainWindow))
Me.AppList = New System.Windows.Forms.ListView()
Me.ShortName = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.Title = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.Path = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.VPath = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.RequiredCommandLine = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.CommandLineSetting = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.IconPath = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.IconIndex = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.SecurityDescriptor = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.ShowInTSWA = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
Me.SmallIcons = New System.Windows.Forms.ImageList(Me.components)
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.NoAppsLabel = New System.Windows.Forms.Label()
Me.CreateButton = New System.Windows.Forms.Button()
Me.DeleteButton = New System.Windows.Forms.Button()
Me.EditButton = New System.Windows.Forms.Button()
Me.CreateClientConnection = New System.Windows.Forms.Button()
Me.ToolsMenuStrip = New System.Windows.Forms.MenuStrip()
Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.HostOptionsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.HelpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.WebsiteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator()
Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.PictureBox1 = New System.Windows.Forms.PictureBox()
Me.RemoveUnusedFileTypeAssociationsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.NewRemoteAppadvancedToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator()
Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator()
Me.ToolsMenuStrip.SuspendLayout()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'AppList
'
Me.AppList.Alignment = System.Windows.Forms.ListViewAlignment.[Default]
Me.AppList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.AppList.BackColor = System.Drawing.Color.White
Me.AppList.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.AppList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ShortName, Me.Title, Me.Path, Me.VPath, Me.RequiredCommandLine, Me.CommandLineSetting, Me.IconPath, Me.IconIndex, Me.SecurityDescriptor, Me.ShowInTSWA})
Me.AppList.GridLines = True
Me.AppList.HideSelection = False
Me.AppList.LargeImageList = Me.SmallIcons
Me.AppList.Location = New System.Drawing.Point(12, 28)
Me.AppList.MultiSelect = False
Me.AppList.Name = "AppList"
Me.AppList.Size = New System.Drawing.Size(423, 189)
Me.AppList.SmallImageList = Me.SmallIcons
Me.AppList.TabIndex = 1
Me.AppList.TileSize = New System.Drawing.Size(200, 36)
Me.AppList.UseCompatibleStateImageBehavior = False
Me.AppList.View = System.Windows.Forms.View.Tile
'
'ShortName
'
Me.ShortName.Text = "ShortName"
Me.ShortName.Width = 200
'
'Title
'
Me.Title.Text = "Name"
'
'Path
'
Me.Path.Text = "Path"
'
'VPath
'
Me.VPath.Text = "VPath"
'
'RequiredCommandLine
'
Me.RequiredCommandLine.Text = "RequiredCommandLine"
'
'CommandLineSetting
'
Me.CommandLineSetting.Text = "CommandLineSetting"
'
'IconPath
'
Me.IconPath.Text = "IconPath"
'
'IconIndex
'
Me.IconIndex.Text = "IconIndex"
'
'SecurityDescriptor
'
Me.SecurityDescriptor.Text = "SecurityDescriptor"
'
'ShowInTSWA
'
Me.ShowInTSWA.Text = "ShowInTSWA"
'
'SmallIcons
'
Me.SmallIcons.ImageStream = CType(resources.GetObject("SmallIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallIcons.Images.SetKeyName(0, "smallicons.ico")
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "tools_16x16.png")
Me.SmallerIcons.Images.SetKeyName(1, "help_16x16.png")
Me.SmallerIcons.Images.SetKeyName(2, "folder_16x16.png")
Me.SmallerIcons.Images.SetKeyName(3, "msi small.ico")
Me.SmallerIcons.Images.SetKeyName(4, "properties.ico")
Me.SmallerIcons.Images.SetKeyName(5, "plus.ico")
Me.SmallerIcons.Images.SetKeyName(6, "minus.ico")
'
'NoAppsLabel
'
Me.NoAppsLabel.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.NoAppsLabel.ForeColor = System.Drawing.Color.DarkGray
Me.NoAppsLabel.Location = New System.Drawing.Point(12, 91)
Me.NoAppsLabel.Name = "NoAppsLabel"
Me.NoAppsLabel.Size = New System.Drawing.Size(410, 58)
Me.NoAppsLabel.TabIndex = 0
Me.NoAppsLabel.Text = "There are no RemoteApps hosted on this computer." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Click + to add one."
Me.NoAppsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.NoAppsLabel.Visible = False
'
'CreateButton
'
Me.CreateButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.CreateButton.AutoSize = True
Me.CreateButton.BackColor = System.Drawing.Color.Transparent
Me.CreateButton.FlatAppearance.BorderSize = 0
Me.CreateButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.CreateButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.CreateButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.CreateButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CreateButton.ImageIndex = 5
Me.CreateButton.ImageList = Me.SmallerIcons
Me.CreateButton.Location = New System.Drawing.Point(12, 227)
Me.CreateButton.Name = "CreateButton"
Me.CreateButton.Size = New System.Drawing.Size(22, 22)
Me.CreateButton.TabIndex = 2
Me.CreateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CreateButton.UseVisualStyleBackColor = False
'
'DeleteButton
'
Me.DeleteButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.DeleteButton.AutoSize = True
Me.DeleteButton.BackColor = System.Drawing.Color.Transparent
Me.DeleteButton.Enabled = False
Me.DeleteButton.FlatAppearance.BorderSize = 0
Me.DeleteButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.DeleteButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.DeleteButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.DeleteButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.DeleteButton.ImageIndex = 6
Me.DeleteButton.ImageList = Me.SmallerIcons
Me.DeleteButton.Location = New System.Drawing.Point(40, 227)
Me.DeleteButton.Name = "DeleteButton"
Me.DeleteButton.Size = New System.Drawing.Size(22, 22)
Me.DeleteButton.TabIndex = 3
Me.DeleteButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.DeleteButton.UseVisualStyleBackColor = False
'
'EditButton
'
Me.EditButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.EditButton.AutoSize = True
Me.EditButton.BackColor = System.Drawing.Color.Transparent
Me.EditButton.Enabled = False
Me.EditButton.FlatAppearance.BorderSize = 0
Me.EditButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent
Me.EditButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent
Me.EditButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.EditButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.EditButton.ForeColor = System.Drawing.SystemColors.ControlText
Me.EditButton.ImageIndex = 4
Me.EditButton.ImageList = Me.SmallerIcons
Me.EditButton.Location = New System.Drawing.Point(68, 227)
Me.EditButton.Name = "EditButton"
Me.EditButton.Size = New System.Drawing.Size(22, 22)
Me.EditButton.TabIndex = 4
Me.EditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.EditButton.UseVisualStyleBackColor = False
'
'CreateClientConnection
'
Me.CreateClientConnection.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CreateClientConnection.AutoSize = True
Me.CreateClientConnection.BackColor = System.Drawing.Color.WhiteSmoke
Me.CreateClientConnection.Enabled = False
Me.CreateClientConnection.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CreateClientConnection.ImageIndex = 3
Me.CreateClientConnection.ImageList = Me.SmallerIcons
Me.CreateClientConnection.Location = New System.Drawing.Point(239, 224)
Me.CreateClientConnection.Name = "CreateClientConnection"
Me.CreateClientConnection.Size = New System.Drawing.Size(183, 29)
Me.CreateClientConnection.TabIndex = 6
Me.CreateClientConnection.Text = "Create Client Connection..."
Me.CreateClientConnection.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CreateClientConnection.UseVisualStyleBackColor = False
'
'ToolsMenuStrip
'
Me.ToolsMenuStrip.AllowMerge = False
Me.ToolsMenuStrip.AutoSize = False
Me.ToolsMenuStrip.BackColor = System.Drawing.Color.Transparent
Me.ToolsMenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.ToolsToolStripMenuItem, Me.HelpToolStripMenuItem})
Me.ToolsMenuStrip.Location = New System.Drawing.Point(0, 0)
Me.ToolsMenuStrip.Name = "ToolsMenuStrip"
Me.ToolsMenuStrip.ShowItemToolTips = True
Me.ToolsMenuStrip.Size = New System.Drawing.Size(434, 24)
Me.ToolsMenuStrip.TabIndex = 5
'
'FileToolStripMenuItem
'
Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.NewRemoteAppadvancedToolStripMenuItem, Me.ToolStripSeparator2, Me.ExitToolStripMenuItem})
Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem"
Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20)
Me.FileToolStripMenuItem.Text = "File"
'
'ExitToolStripMenuItem
'
Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem"
Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(92, 22)
Me.ExitToolStripMenuItem.Text = "Exit"
'
'ToolsToolStripMenuItem
'
Me.ToolsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.HostOptionsToolStripMenuItem, Me.ToolStripSeparator3, Me.RemoveUnusedFileTypeAssociationsToolStripMenuItem})
Me.ToolsToolStripMenuItem.Name = "ToolsToolStripMenuItem"
Me.ToolsToolStripMenuItem.Size = New System.Drawing.Size(94, 20)
Me.ToolsToolStripMenuItem.Text = "&Tools"
'
'HostOptionsToolStripMenuItem
'
Me.HostOptionsToolStripMenuItem.Name = "HostOptionsToolStripMenuItem"
Me.HostOptionsToolStripMenuItem.Size = New System.Drawing.Size(280, 22)
Me.HostOptionsToolStripMenuItem.Text = "Host Options..."
'
'HelpToolStripMenuItem
'
Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WebsiteToolStripMenuItem, Me.ToolStripSeparator1, Me.AboutToolStripMenuItem})
Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem"
Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(44, 20)
Me.HelpToolStripMenuItem.Text = "Help"
'
'WebsiteToolStripMenuItem
'
Me.WebsiteToolStripMenuItem.Name = "WebsiteToolStripMenuItem"
Me.WebsiteToolStripMenuItem.Size = New System.Drawing.Size(116, 22)
Me.WebsiteToolStripMenuItem.Text = "Website"
'
'ToolStripSeparator1
'
Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
Me.ToolStripSeparator1.Size = New System.Drawing.Size(113, 6)
'
'AboutToolStripMenuItem
'
Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem"
Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(116, 22)
Me.AboutToolStripMenuItem.Text = "About..."
'
'PictureBox1
'
Me.PictureBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.PictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.PictureBox1.Location = New System.Drawing.Point(-1, 27)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(435, 191)
Me.PictureBox1.TabIndex = 7
Me.PictureBox1.TabStop = False
'
'RemoveUnusedFileTypeAssociationsToolStripMenuItem
'
Me.RemoveUnusedFileTypeAssociationsToolStripMenuItem.Name = "RemoveUnusedFileTypeAssociationsToolStripMenuItem"
Me.RemoveUnusedFileTypeAssociationsToolStripMenuItem.Size = New System.Drawing.Size(280, 22)
Me.RemoveUnusedFileTypeAssociationsToolStripMenuItem.Text = "Remove unused file type associations..."
'
'NewRemoteAppadvancedToolStripMenuItem
'
Me.NewRemoteAppadvancedToolStripMenuItem.Name = "NewRemoteAppadvancedToolStripMenuItem"
Me.NewRemoteAppadvancedToolStripMenuItem.Size = New System.Drawing.Size(235, 22)
Me.NewRemoteAppadvancedToolStripMenuItem.Text = "New RemoteApp (advanced)..."
'
'ToolStripSeparator2
'
Me.ToolStripSeparator2.Name = "ToolStripSeparator2"
Me.ToolStripSeparator2.Size = New System.Drawing.Size(232, 6)
'
'ToolStripSeparator3
'
Me.ToolStripSeparator3.Name = "ToolStripSeparator3"
Me.ToolStripSeparator3.Size = New System.Drawing.Size(277, 6)
'
'RemoteAppMainWindow
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.ClientSize = New System.Drawing.Size(434, 261)
Me.Controls.Add(Me.NoAppsLabel)
Me.Controls.Add(Me.CreateClientConnection)
Me.Controls.Add(Me.CreateButton)
Me.Controls.Add(Me.DeleteButton)
Me.Controls.Add(Me.EditButton)
Me.Controls.Add(Me.ToolsMenuStrip)
Me.Controls.Add(Me.AppList)
Me.Controls.Add(Me.PictureBox1)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MainMenuStrip = Me.ToolsMenuStrip
Me.MinimumSize = New System.Drawing.Size(450, 300)
Me.Name = "RemoteAppMainWindow"
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show
Me.Text = "RemoteApp Tool"
Me.ToolsMenuStrip.ResumeLayout(False)
Me.ToolsMenuStrip.PerformLayout()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents AppList As System.Windows.Forms.ListView
Friend WithEvents ShortName As System.Windows.Forms.ColumnHeader
Friend WithEvents Title As System.Windows.Forms.ColumnHeader
Friend WithEvents Path As System.Windows.Forms.ColumnHeader
Friend WithEvents VPath As System.Windows.Forms.ColumnHeader
Friend WithEvents RequiredCommandLine As System.Windows.Forms.ColumnHeader
Friend WithEvents CommandLineSetting As System.Windows.Forms.ColumnHeader
Friend WithEvents IconPath As System.Windows.Forms.ColumnHeader
Friend WithEvents IconIndex As System.Windows.Forms.ColumnHeader
Friend WithEvents SecurityDescriptor As System.Windows.Forms.ColumnHeader
Friend WithEvents ShowInTSWA As System.Windows.Forms.ColumnHeader
Friend WithEvents SmallIcons As System.Windows.Forms.ImageList
Friend WithEvents CreateButton As System.Windows.Forms.Button
Friend WithEvents SmallerIcons As System.Windows.Forms.ImageList
Friend WithEvents DeleteButton As System.Windows.Forms.Button
Friend WithEvents EditButton As System.Windows.Forms.Button
Friend WithEvents NoAppsLabel As System.Windows.Forms.Label
Friend WithEvents CreateClientConnection As System.Windows.Forms.Button
Friend WithEvents ToolsMenuStrip As System.Windows.Forms.MenuStrip
Friend WithEvents ToolsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents HostOptionsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents FileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents ExitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents HelpToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents AboutToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents WebsiteToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
Friend WithEvents RemoveUnusedFileTypeAssociationsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents NewRemoteAppadvancedToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents ToolStripSeparator2 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,167 @@
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports RemoteAppLib
Public Class RemoteAppMainWindow
Private Sub RemoteAppMainWindow_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
If Not Me.WindowState = FormWindowState.Maximized Then
My.Settings.MainWindowWidth = Me.Width
My.Settings.MainWindowHeight = Me.Height
End If
End Sub
Private Sub RemoteAppMainWindow_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sra As New SystemRemoteApps
sra.Init()
Try
TestIconLib()
Catch ex As System.IO.FileNotFoundException
MessageBox.Show("IconLib.dll is unavailable. Please add it to the RemoteApp Tool folder.")
End
End Try
Me.Text = My.Application.Info.Title & " " & My.Application.Info.Version.ToString & " (" & System.Net.Dns.GetHostName & ")"
If Not My.Computer.Keyboard.ShiftKeyDown Then
If Not My.Settings.MainWindowWidth < Me.MinimumSize.Width Then Me.Width = My.Settings.MainWindowWidth
If Not My.Settings.MainWindowHeight < Me.MinimumSize.Height Then Me.Height = My.Settings.MainWindowHeight
End If
HelpSystem.SetupTips(Me)
AddSysMenuItems()
ReloadApps()
End Sub
Public Sub ReloadApps()
Me.AppList.Clear()
Dim SystemApps As New SystemRemoteApps
Dim Apps As New RemoteAppCollection
Apps = SystemApps.GetAll
For Each App As RemoteApp In Apps
SmallIcons.Images.RemoveByKey(App.Name)
Dim TheBitmap = GetAppBitmap(App.Name)
Dim AppItem As New ListViewItem(App.Name)
AppItem.ToolTipText = App.FullName
AppItem.ImageIndex = 0
Me.SmallIcons.Images.Add(App.Name, TheBitmap)
AppItem.ImageKey = App.Name
AppList.Items.Add(AppItem)
Next
If Apps.Count = 0 Then
NoAppsLabel.Visible = True
Else
NoAppsLabel.Visible = False
End If
EditButton.Enabled = False
DeleteButton.Enabled = False
CreateClientConnection.Enabled = False
End Sub
Private Sub AppList_DoubleClick(sender As Object, e As EventArgs) Handles AppList.DoubleClick
If Me.AppList.SelectedItems.Count = 1 Then
EditRemoteApp(Me.AppList.SelectedItems(0).Text)
End If
End Sub
Private Sub AppList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles AppList.SelectedIndexChanged
If AppList.SelectedItems.Count = 1 Then
Me.EditButton.Enabled = True
Me.DeleteButton.Enabled = True
CreateClientConnection.Enabled = True
Else
Me.EditButton.Enabled = False
Me.DeleteButton.Enabled = False
Me.CreateClientConnection.Enabled = False
End If
End Sub
Private Sub EditButton_Click(sender As Object, e As EventArgs) Handles EditButton.Click
If Me.AppList.SelectedItems.Count = 1 Then
EditRemoteApp(Me.AppList.SelectedItems(0).Text)
End If
End Sub
Private Sub EditRemoteApp(AppName As String)
Dim sra As New SystemRemoteApps
RemoteAppEditWindow.EditRemoteApp(sra.GetApp(AppName))
End Sub
Private Sub DeleteButton_Click(sender As Object, e As EventArgs) Handles DeleteButton.Click
DeleteRemoteApp(AppList.SelectedItems(0).Text)
ReloadApps()
End Sub
Private Sub DeleteRemoteApp(ByVal AppName As String)
If MessageBox.Show("Are you sure you want to remove " & AppName & "?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
Dim sra As New SystemRemoteApps
sra.DeleteApp(AppName)
End If
End Sub
Private Sub CreateButton_Click(sender As Object, e As EventArgs) Handles CreateButton.Click
RemoteAppEditWindow.CreateRemoteApp()
ReloadApps()
End Sub
'System Menu Code (for about box)
Private Declare Function AppendMenu Lib "user32.dll" Alias "AppendMenuA" (ByVal hMenu As IntPtr, ByVal uFlags As Int32, ByVal uIDNewItem As IntPtr, ByVal lpNewItem As String) As Boolean
Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
Private Const MF_STRING As Integer = &H0
Private Const MF_SEPARATOR As Integer = &H800
Private Const WM_SYSCOMMAND = &H112
Private Sub AddSysMenuItems()
'Get the System Menus Handle.
Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)
'Add a standard Separator Item.
AppendMenu(hSysMenu, MF_SEPARATOR, 1000, Nothing)
'Add an About Menu Item.
AppendMenu(hSysMenu, MF_STRING, 1001, "About...")
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If (m.Msg = WM_SYSCOMMAND) Then
Select Case m.WParam.ToInt32
Case 1001
RemoteAppAboutWindow.ShowDialog()
End Select
End If
End Sub
Private Sub CreateClientConnection_Click(sender As Object, e As EventArgs) Handles CreateClientConnection.Click
Dim sra As New SystemRemoteApps
RemoteAppCreateClientConnection.CreateClientConnection(sra.GetApp(Me.AppList.SelectedItems(0).Text))
End Sub
Private Sub HostOptionsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HostOptionsToolStripMenuItem.Click
RemoteAppHostOptions.SetValues()
RemoteAppHostOptions.ShowDialog()
End Sub
Private Sub AboutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click
RemoteAppAboutWindow.ShowDialog()
End Sub
Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
End
End Sub
Private Sub WebsiteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WebsiteToolStripMenuItem.Click
System.Diagnostics.Process.Start("http://www.kimknight.net/remoteapptool")
End Sub
Private Sub RemoveUnusedFileTypeAssociationsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RemoveUnusedFileTypeAssociationsToolStripMenuItem.Click
LocalFtaModule.RemoveUnusedFTAs()
End Sub
Private Sub NewRemoteAppadvancedToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NewRemoteAppadvancedToolStripMenuItem.Click
RemoteAppEditWindow.CreateRemoteApp(True)
ReloadApps()
End Sub
End Class

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with.
Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
<!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>

2
remoteapplib/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin/
obj/

6
remoteapplib/App.config Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

View File

@ -0,0 +1,34 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("")>
<Assembly: AssemblyCopyright("Copyright © 2016")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("936d6a70-fabd-4205-a2bb-4232560e468a")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
<Assembly: AssemblyVersion("1.0.0.1")>
<Assembly: AssemblyFileVersion("1.0.0.1")>

View File

@ -0,0 +1,183 @@
Imports System.Reflection.Assembly
Public Class RemoteAppCollection
Inherits System.Collections.CollectionBase
Public Sub Add(RemoteApp As RemoteApp)
List.Add(RemoteApp)
End Sub
Public Sub Remove(RemoteApp As RemoteApp)
List.Remove(RemoteApp)
End Sub
End Class
Public Class RemoteApp
Public Name As String
Public FullName As String
Public Path As String
Public VPath As String
Public IconPath As String
Public IconIndex As Integer = 0
Public CommandLine As String = ""
Public CommandLineOption As Integer = 1
Public TSWA As Boolean = False
Public FileTypeAssociations As FileTypeAssociationCollection
End Class
Public Class FileTypeAssociation
Public Extension As String
Public IconPath As String
Public IconIndex As String
End Class
Public Class FileTypeAssociationCollection
Inherits System.Collections.CollectionBase
Public Sub Add(FileTypeAssociation As FileTypeAssociation)
List.Add(FileTypeAssociation)
End Sub
Public Sub Remove(FileTypeAssociation As FileTypeAssociation)
List.Remove(FileTypeAssociation)
End Sub
Public Function GetFlatFileTypes() As String
GetFlatFileTypes = ""
If List.Count > 0 Then
For Each listItem As FileTypeAssociation In List
GetFlatFileTypes += ",." & listItem.Extension
Next
GetFlatFileTypes = GetFlatFileTypes.Substring(1)
End If
End Function
End Class
Public Class IconSelection
Public IconPath As String
Public IconIndex As String
End Class
Public Class SystemRemoteApps
Private Legacy32bit As Boolean = False
Private RegistryPath As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications"
Private BaseKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(RegistryPath)
Private BaseKeyWrite As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(RegistryPath, True)
Public Sub Init()
Dim RegistryPathCV As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
Dim cvKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(RegistryPathCV, True)
Dim tsKey As Microsoft.Win32.RegistryKey = cvKey.CreateSubKey("Terminal Server")
Dim tsaaKey As Microsoft.Win32.RegistryKey = tsKey.CreateSubKey("TSAppAllowList")
Dim appKey As Microsoft.Win32.RegistryKey = tsaaKey.CreateSubKey("Applications")
End Sub
Public Function GetAll() As RemoteAppCollection
Dim SystemAppCollection As New RemoteAppCollection
For Each App As String In BaseKey.GetSubKeyNames
Dim RemoteApp As New RemoteApp
RemoteApp = GetApp(App)
SystemAppCollection.Add(RemoteApp)
Next
BaseKey.Close()
Return SystemAppCollection
End Function
Function GetApp(Name As String) As RemoteApp
Dim App As New RemoteApp
Dim AppKey As Microsoft.Win32.RegistryKey = BaseKey.OpenSubKey(Name)
App.Name = Name
App.FullName = AppKey.GetValue("Name", "")
App.Path = AppKey.GetValue("Path", "")
App.VPath = AppKey.GetValue("VPath", "")
App.CommandLine = AppKey.GetValue("RequiredCommandLine", "")
App.CommandLineOption = AppKey.GetValue("CommandLineSetting", "1")
App.IconPath = AppKey.GetValue("IconPath", "")
App.IconIndex = AppKey.GetValue("IconIndex", 0)
App.TSWA = AppKey.GetValue("ShowInTSWA", 0)
Dim FTAKey As Microsoft.Win32.RegistryKey = AppKey.OpenSubKey("Filetypes")
If Not FTAKey Is Nothing Then
Dim FTACol As New FileTypeAssociationCollection
For Each FTAValueName As String In FTAKey.GetValueNames
Dim FTA As New FileTypeAssociation
Dim FTAValue = FTAKey.GetValue(FTAValueName).ToString.Split(",")
FTA.Extension = FTAValueName
FTA.IconPath = FTAValue(0)
FTA.IconIndex = Val(FTAValue(1))
FTACol.Add(FTA)
Next
App.FileTypeAssociations = FTACol
End If
Return App
End Function
Public Sub SaveApp(RemoteApp As RemoteApp)
BaseKeyWrite.CreateSubKey(RemoteApp.Name)
Dim AppKey As Microsoft.Win32.RegistryKey = BaseKey.OpenSubKey(RemoteApp.Name, True)
AppKey.SetValue("Name", RemoteApp.FullName, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("Path", RemoteApp.Path, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("VPath", RemoteApp.VPath, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("RequiredCommandLine", RemoteApp.CommandLine, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("CommandLineSetting", RemoteApp.CommandLineOption, Microsoft.Win32.RegistryValueKind.DWord)
AppKey.SetValue("IconPath", RemoteApp.IconPath, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("IconIndex", RemoteApp.IconIndex, Microsoft.Win32.RegistryValueKind.DWord)
AppKey.SetValue("ShowInTSWA", RemoteApp.TSWA, Microsoft.Win32.RegistryValueKind.DWord)
If Not RemoteApp.FileTypeAssociations Is Nothing Then
If Not AppKey.OpenSubKey("Filetypes") Is Nothing Then AppKey.DeleteSubKeyTree("Filetypes")
AppKey.CreateSubKey("Filetypes")
Dim FTAKey = AppKey.OpenSubKey("Filetypes", True)
For Each fta As FileTypeAssociation In RemoteApp.FileTypeAssociations
FTAKey.SetValue(fta.Extension, fta.IconPath & "," & fta.IconIndex.ToString, Microsoft.Win32.RegistryValueKind.String)
Next
End If
End Sub
Public Sub RenameApp(RemoteAppOldName As String, RemoteAppNewName As String)
Dim App As New RemoteApp
Dim SystemApps As New SystemRemoteApps
App = SystemApps.GetApp(RemoteAppOldName)
DeleteApp(RemoteAppOldName)
App.Name = RemoteAppNewName
SaveApp(App)
End Sub
Public Sub DeleteApp(Name As String)
BaseKeyWrite.DeleteSubKeyTree(Name)
End Sub
Public Property WoW6432Node As Boolean
Get
Return Legacy32bit
End Get
Set(value As Boolean)
Legacy32bit = value
Dim PathStart As String = "SOFTWARE"
If Legacy32bit = True Then PathStart = "SOFTWARE\Wow6432Node"
RegistryPath = PathStart & "\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications"
End Set
End Property
End Class

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{785B6808-B2FE-4C18-9D63-6DAB46482374}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>RemoteAppLib</RootNamespace>
<AssemblyName>RemoteAppLib</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Empty</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>
</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>
</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<StartupObject>
</StartupObject>
</PropertyGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="RemoteAppLib.vb" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>