mirror of
https://github.com/kimmknight/remoteapptool.git
synced 2024-11-21 21:17:20 +00:00
Initial commit
This commit is contained in:
commit
f1f7664b91
344
.gitignore
vendored
Normal file
344
.gitignore
vendored
Normal 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
2
RDP2MSI/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
6
RDP2MSI/App.config
Normal file
6
RDP2MSI/App.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
13
RDP2MSI/My Project/Application.Designer.vb
generated
Normal file
13
RDP2MSI/My Project/Application.Designer.vb
generated
Normal 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
|
||||||
|
|
10
RDP2MSI/My Project/Application.myapp
Normal file
10
RDP2MSI/My Project/Application.myapp
Normal 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>
|
35
RDP2MSI/My Project/AssemblyInfo.vb
Normal file
35
RDP2MSI/My Project/AssemblyInfo.vb
Normal 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
63
RDP2MSI/My Project/Resources.Designer.vb
generated
Normal 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
|
117
RDP2MSI/My Project/Resources.resx
Normal file
117
RDP2MSI/My Project/Resources.resx
Normal 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
73
RDP2MSI/My Project/Settings.Designer.vb
generated
Normal 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
|
7
RDP2MSI/My Project/Settings.settings
Normal file
7
RDP2MSI/My Project/Settings.settings
Normal 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>
|
55
RDP2MSI/My Project/app.manifest
Normal file
55
RDP2MSI/My Project/app.manifest
Normal 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
132
RDP2MSI/RDP2MSI.vb
Normal 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
125
RDP2MSI/RDP2MSI.vbproj
Normal 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
2
RDP2MSILib/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
13
RDP2MSILib/My Project/Application.Designer.vb
generated
Normal file
13
RDP2MSILib/My Project/Application.Designer.vb
generated
Normal 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
|
||||||
|
|
10
RDP2MSILib/My Project/Application.myapp
Normal file
10
RDP2MSILib/My Project/Application.myapp
Normal 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>
|
35
RDP2MSILib/My Project/AssemblyInfo.vb
Normal file
35
RDP2MSILib/My Project/AssemblyInfo.vb
Normal 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")>
|
63
RDP2MSILib/My Project/Resources.Designer.vb
generated
Normal file
63
RDP2MSILib/My Project/Resources.Designer.vb
generated
Normal 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
|
117
RDP2MSILib/My Project/Resources.resx
Normal file
117
RDP2MSILib/My Project/Resources.resx
Normal 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
RDP2MSILib/My Project/Settings.Designer.vb
generated
Normal file
73
RDP2MSILib/My Project/Settings.Designer.vb
generated
Normal 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
|
7
RDP2MSILib/My Project/Settings.settings
Normal file
7
RDP2MSILib/My Project/Settings.settings
Normal 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
364
RDP2MSILib/RDP2MSILib.vb
Normal 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
|
110
RDP2MSILib/RDP2MSILib.vbproj
Normal file
110
RDP2MSILib/RDP2MSILib.vbproj
Normal 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
2
RDPFileLib/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
13
RDPFileLib/My Project/Application.Designer.vb
generated
Normal file
13
RDPFileLib/My Project/Application.Designer.vb
generated
Normal 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
|
||||||
|
|
10
RDPFileLib/My Project/Application.myapp
Normal file
10
RDPFileLib/My Project/Application.myapp
Normal 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>
|
35
RDPFileLib/My Project/AssemblyInfo.vb
Normal file
35
RDPFileLib/My Project/AssemblyInfo.vb
Normal 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")>
|
63
RDPFileLib/My Project/Resources.Designer.vb
generated
Normal file
63
RDPFileLib/My Project/Resources.Designer.vb
generated
Normal 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
|
117
RDPFileLib/My Project/Resources.resx
Normal file
117
RDPFileLib/My Project/Resources.resx
Normal 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
RDPFileLib/My Project/Settings.Designer.vb
generated
Normal file
73
RDPFileLib/My Project/Settings.Designer.vb
generated
Normal 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
|
5
RDPFileLib/My Project/Settings.settings
Normal file
5
RDPFileLib/My Project/Settings.settings
Normal 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>
|
111
RDPFileLib/RDPFileLib.bak.vbproj
Normal file
111
RDPFileLib/RDPFileLib.bak.vbproj
Normal 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
255
RDPFileLib/RDPFileLib.vb
Normal 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
|
111
RDPFileLib/RDPFileLib.vbproj
Normal file
111
RDPFileLib/RDPFileLib.vbproj
Normal 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
27
RDPFileLib/app.config
Normal 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
2
remoteapp-tool/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
72
remoteapp-tool/App.config
Normal file
72
remoteapp-tool/App.config
Normal 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>
|
1
remoteapp-tool/ApplicationEvents.vb
Normal file
1
remoteapp-tool/ApplicationEvents.vb
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
102
remoteapp-tool/HelpSystem.vb
Normal file
102
remoteapp-tool/HelpSystem.vb
Normal 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
|
155
remoteapp-tool/IconModule.vb
Normal file
155
remoteapp-tool/IconModule.vb
Normal 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
|
131
remoteapp-tool/LocalFtaModule.vb
Normal file
131
remoteapp-tool/LocalFtaModule.vb
Normal 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
|
38
remoteapp-tool/My Project/Application.Designer.vb
generated
Normal file
38
remoteapp-tool/My Project/Application.Designer.vb
generated
Normal 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
|
10
remoteapp-tool/My Project/Application.myapp
Normal file
10
remoteapp-tool/My Project/Application.myapp
Normal 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>
|
35
remoteapp-tool/My Project/AssemblyInfo.vb
Normal file
35
remoteapp-tool/My Project/AssemblyInfo.vb
Normal 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")>
|
63
remoteapp-tool/My Project/Resources.Designer.vb
generated
Normal file
63
remoteapp-tool/My Project/Resources.Designer.vb
generated
Normal 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
|
121
remoteapp-tool/My Project/Resources.resx
Normal file
121
remoteapp-tool/My Project/Resources.resx
Normal 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>
|
301
remoteapp-tool/My Project/Settings.Designer.vb
generated
Normal file
301
remoteapp-tool/My Project/Settings.Designer.vb
generated
Normal 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
|
63
remoteapp-tool/My Project/Settings.settings
Normal file
63
remoteapp-tool/My Project/Settings.settings
Normal 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>
|
52
remoteapp-tool/My Project/app.manifest
Normal file
52
remoteapp-tool/My Project/app.manifest
Normal 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>
|
398
remoteapp-tool/RDP2MSImodule.vb
Normal file
398
remoteapp-tool/RDP2MSImodule.vb
Normal 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
|
52
remoteapp-tool/RemoteApp Tool.sln
Normal file
52
remoteapp-tool/RemoteApp Tool.sln
Normal 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
|
292
remoteapp-tool/RemoteApp Tool.vbproj
Normal file
292
remoteapp-tool/RemoteApp Tool.vbproj
Normal 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>
|
BIN
remoteapp-tool/RemoteApp Tool_TemporaryKey.pfx
Normal file
BIN
remoteapp-tool/RemoteApp Tool_TemporaryKey.pfx
Normal file
Binary file not shown.
152
remoteapp-tool/RemoteAppAboutWindow.Designer.vb
generated
Normal file
152
remoteapp-tool/RemoteAppAboutWindow.Designer.vb
generated
Normal 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
|
6334
remoteapp-tool/RemoteAppAboutWindow.resx
Normal file
6334
remoteapp-tool/RemoteAppAboutWindow.resx
Normal file
File diff suppressed because it is too large
Load Diff
27
remoteapp-tool/RemoteAppAboutWindow.vb
Normal file
27
remoteapp-tool/RemoteAppAboutWindow.vb
Normal 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
|
628
remoteapp-tool/RemoteAppCreateClientConnection.Designer.vb
generated
Normal file
628
remoteapp-tool/RemoteAppCreateClientConnection.Designer.vb
generated
Normal 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
|
6501
remoteapp-tool/RemoteAppCreateClientConnection.resx
Normal file
6501
remoteapp-tool/RemoteAppCreateClientConnection.resx
Normal file
File diff suppressed because it is too large
Load Diff
357
remoteapp-tool/RemoteAppCreateClientConnection.vb
Normal file
357
remoteapp-tool/RemoteAppCreateClientConnection.vb
Normal 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
|
452
remoteapp-tool/RemoteAppEditWindow.Designer.vb
generated
Normal file
452
remoteapp-tool/RemoteAppEditWindow.Designer.vb
generated
Normal 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
|
6508
remoteapp-tool/RemoteAppEditWindow.resx
Normal file
6508
remoteapp-tool/RemoteAppEditWindow.resx
Normal file
File diff suppressed because it is too large
Load Diff
231
remoteapp-tool/RemoteAppEditWindow.vb
Normal file
231
remoteapp-tool/RemoteAppEditWindow.vb
Normal 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
|
231
remoteapp-tool/RemoteAppFileTypeAssociation.Designer.vb
generated
Normal file
231
remoteapp-tool/RemoteAppFileTypeAssociation.Designer.vb
generated
Normal 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
|
6468
remoteapp-tool/RemoteAppFileTypeAssociation.resx
Normal file
6468
remoteapp-tool/RemoteAppFileTypeAssociation.resx
Normal file
File diff suppressed because it is too large
Load Diff
196
remoteapp-tool/RemoteAppFileTypeAssociation.vb
Normal file
196
remoteapp-tool/RemoteAppFileTypeAssociation.vb
Normal 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
|
113
remoteapp-tool/RemoteAppFunctions.vb
Normal file
113
remoteapp-tool/RemoteAppFunctions.vb
Normal 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
|
220
remoteapp-tool/RemoteAppHostOptions.Designer.vb
generated
Normal file
220
remoteapp-tool/RemoteAppHostOptions.Designer.vb
generated
Normal 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
|
6377
remoteapp-tool/RemoteAppHostOptions.resx
Normal file
6377
remoteapp-tool/RemoteAppHostOptions.resx
Normal file
File diff suppressed because it is too large
Load Diff
139
remoteapp-tool/RemoteAppHostOptions.vb
Normal file
139
remoteapp-tool/RemoteAppHostOptions.vb
Normal 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
|
278
remoteapp-tool/RemoteAppIconPicker.Designer.vb
generated
Normal file
278
remoteapp-tool/RemoteAppIconPicker.Designer.vb
generated
Normal 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
|
6495
remoteapp-tool/RemoteAppIconPicker.resx
Normal file
6495
remoteapp-tool/RemoteAppIconPicker.resx
Normal file
File diff suppressed because it is too large
Load Diff
158
remoteapp-tool/RemoteAppIconPicker.vb
Normal file
158
remoteapp-tool/RemoteAppIconPicker.vb
Normal 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
|
391
remoteapp-tool/RemoteAppMainWindow.Designer.vb
generated
Normal file
391
remoteapp-tool/RemoteAppMainWindow.Designer.vb
generated
Normal 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
|
6555
remoteapp-tool/RemoteAppMainWindow.resx
Normal file
6555
remoteapp-tool/RemoteAppMainWindow.resx
Normal file
File diff suppressed because it is too large
Load Diff
167
remoteapp-tool/RemoteAppMainWindow.vb
Normal file
167
remoteapp-tool/RemoteAppMainWindow.vb
Normal 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
|
BIN
remoteapp-tool/add-window.ico
Normal file
BIN
remoteapp-tool/add-window.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 364 KiB |
52
remoteapp-tool/app.manifest
Normal file
52
remoteapp-tool/app.manifest
Normal 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
2
remoteapplib/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
6
remoteapplib/App.config
Normal file
6
remoteapplib/App.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
34
remoteapplib/My Project/AssemblyInfo.vb
Normal file
34
remoteapplib/My Project/AssemblyInfo.vb
Normal 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")>
|
183
remoteapplib/RemoteAppLib.vb
Normal file
183
remoteapplib/RemoteAppLib.vb
Normal 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
|
80
remoteapplib/RemoteAppLib.vbproj
Normal file
80
remoteapplib/RemoteAppLib.vbproj
Normal 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>
|
Loading…
Reference in New Issue
Block a user