mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
merged develop into pr/1690
This commit is contained in:
1618
CHANGELOG.md
1618
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -139,11 +139,6 @@ Copyright © 2006-2016 Phillip Piper
|
||||
GNU General Public License (GPL) Version 3
|
||||
https://sourceforge.net/projects/objectlistview/
|
||||
|
||||
Markdig
|
||||
Copyright © 2016-2019 Alexandre Mutel
|
||||
BSD 2-Clause "Simplified"
|
||||
https://github.com/lunet-io/markdig
|
||||
|
||||
ConsoleControl
|
||||
Copyright © 2015 Dave Kerr
|
||||
MIT License
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
|
||||
<Fragment>
|
||||
<Component Id="C.MainExe" Directory="INSTALLDIR" Guid="*">
|
||||
<Component Id="C.MainExe" Directory="INSTALLDIR" Guid="a028ee50-3135-46c7-83c0-1d14d36e146c">
|
||||
<File Id="MainExeFile" Source="$(var.SolutionDir)mRemoteV1\bin\$(var.Configuration)\mRemoteNG.exe" />
|
||||
</Component>
|
||||
</Fragment>
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Fragment>
|
||||
<Fragment>
|
||||
<ComponentGroup Id="CG.ProjectInfoFiles" Directory="INSTALLDIR">
|
||||
<Component Id="C.Changelog" Guid="*">
|
||||
<File Id="ChangelogFile" Name="Changelog.txt" Source="$(var.SolutionDir)CHANGELOG.md" KeyPath="yes" />
|
||||
<Component Id="C.Changelog" Guid="762459f4-0460-4058-a448-d0f4e5cd4a65">
|
||||
<File Id="ChangelogFile" Name="Changelog" Source="$(var.SolutionDir)CHANGELOG.md" KeyPath="yes" />
|
||||
</Component>
|
||||
<Component Id="C.Credits" Guid="*">
|
||||
<File Id="CreditsFile" Name="Credits.txt" Source="$(var.SolutionDir)CREDITS.md" KeyPath="yes" />
|
||||
<Component Id="C.Credits" Guid="30d1a804-209f-4535-a546-1610a76c3d1b">
|
||||
<File Id="CreditsFile" Name="Credits" Source="$(var.SolutionDir)CREDITS.md" KeyPath="yes" />
|
||||
</Component>
|
||||
<Component Id="C.License" Guid="*">
|
||||
<File Id="LicenseFile" Name="License.txt" Source="$(var.SolutionDir)COPYING.TXT" KeyPath="yes" />
|
||||
<Component Id="C.License" Guid="89e79101-fcf9-4277-b948-1fd5f1fcae69">
|
||||
<File Id="LicenseFile" Name="License" Source="$(var.SolutionDir)COPYING.TXT" KeyPath="yes" />
|
||||
</Component>
|
||||
<Component Id="C.Readme" Guid="*">
|
||||
<File Id="ReadmeFile" Name="Readme.txt" Source="$(var.SolutionDir)README.md" KeyPath="yes" />
|
||||
<Component Id="C.Readme" Guid="1359cc74-fe51-4c6e-81f4-2bee7871c40f">
|
||||
<File Id="ReadmeFile" Name="Readme" Source="$(var.SolutionDir)README.md" KeyPath="yes" />
|
||||
</Component>
|
||||
<Component Id="C.TileManifest" Guid="*">
|
||||
<File Id="TileManifest" Name="mRemoteNG.VisualElementsManifest.xml" Source="$(var.SolutionDir)mRemoteV1\bin\Release\mRemoteNG.VisualElementsManifest.xml" KeyPath="yes" />
|
||||
<Component Id="C.TileManifest" Guid="5d067bad-f6f6-466e-b1aa-d68b496026d3">
|
||||
<File Id="TileManifest" Name="VisualElementsManifest" Source="$(var.mRemoteV1.TargetDir)mRemoteNG.VisualElementsManifest.xml" KeyPath="yes" />
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
</Fragment>
|
||||
</Wix>
|
||||
@@ -2,7 +2,7 @@
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Fragment>
|
||||
<DirectoryRef Id="INSTALLDIR">
|
||||
<Component Id="C.PuttyNGFile" Guid="*">
|
||||
<Component Id="C.PuttyNGFile" Guid="86bc1cf4-4c51-40a1-a9fe-cf9669bb883a">
|
||||
<File Id="PuttyNGFile" Name="PuTTYNG.exe" Source="$(var.HarvestPath)\PuTTYNG.exe" KeyPath="yes" />
|
||||
</Component>
|
||||
</DirectoryRef>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Fragment>
|
||||
<DirectoryRef Id="TARGETDIR">
|
||||
<Component Id="C.RegistryEntries" Guid="*">
|
||||
<Component Id="C.RegistryEntries" Guid="888643e4-4c52-45d3-801a-0d0d71c737fe">
|
||||
<RegistryKey Root="HKLM" Key="Software\mRemoteNG">
|
||||
<RegistryValue Type="string" Name="InstallDir" Value="[INSTALLDIR]" KeyPath="yes" />
|
||||
</RegistryKey>
|
||||
|
||||
@@ -34,7 +34,7 @@ mRemoteNG supports the following protocols:
|
||||
* rlogin (Remote Login)
|
||||
* Raw Socket Connections
|
||||
|
||||
For a detailed feature list and general usage support, refer to the [User Manual](https://github.com/mRemoteNG/mRemoteNG/wiki/User-Manual).
|
||||
For a detailed feature list and general usage support, refer to the [Documentation](https://mremoteng.readthedocs.io/en/latest/).
|
||||
|
||||
## Installation
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.5.0" newVersion="1.8.5.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.6.0" newVersion="1.8.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
@@ -25,11 +25,23 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.9.2.0" newVersion="3.9.2.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.12.1.0" newVersion="3.12.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Cucumber.Messages" publicKeyToken="b10c5988214f940c" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.2.0" newVersion="6.0.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.props" Condition="Exists('..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.props')" />
|
||||
<Import Project="..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" />
|
||||
<Import Project="..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.props" Condition="Exists('..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.props')" />
|
||||
<Import Project="..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props')" />
|
||||
<Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
@@ -40,22 +40,74 @@
|
||||
<Reference Include="BoDi, Version=1.4.1.0, Culture=neutral, PublicKeyToken=ff7cd5ea2744b496, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\BoDi.1.4.1\lib\net45\BoDi.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Cucumber.Messages, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b10c5988214f940c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Cucumber.Messages.6.0.2\lib\net45\Cucumber.Messages.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Gherkin, Version=6.0.0.0, Culture=neutral, PublicKeyToken=86496cfa5b4a5851, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Gherkin.6.0.0\lib\net45\Gherkin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Protobuf, Version=3.12.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Protobuf.3.12.1\lib\net45\Google.Protobuf.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
|
||||
@@ -64,13 +116,12 @@
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="TechTalk.SpecFlow, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SpecFlow.3.0.225\lib\net45\TechTalk.SpecFlow.dll</HintPath>
|
||||
<Reference Include="TechTalk.SpecFlow, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SpecFlow.3.1.97\lib\net45\TechTalk.SpecFlow.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="TechTalk.SpecFlow.NUnit.SpecFlowPlugin, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SpecFlow.NUnit.3.0.225\lib\net45\TechTalk.SpecFlow.NUnit.SpecFlowPlugin.dll</HintPath>
|
||||
<Reference Include="TechTalk.SpecFlow.NUnit.SpecFlowPlugin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SpecFlow.NUnit.3.1.97\lib\net45\TechTalk.SpecFlow.NUnit.SpecFlowPlugin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Utf8Json, Version=1.3.7.0, Culture=neutral, PublicKeyToken=8a73d3ba7e392e27, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Utf8Json.1.3.7\lib\net47\Utf8Json.dll</HintPath>
|
||||
@@ -121,11 +172,13 @@
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.12.0\build\NUnit.props'))" />
|
||||
<Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props'))" />
|
||||
<Error Condition="!Exists('..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.props'))" />
|
||||
<Error Condition="!Exists('..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props'))" />
|
||||
<Error Condition="!Exists('..\packages\SpecFlow.3.1.97\build\SpecFlow.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SpecFlow.3.1.97\build\SpecFlow.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.props'))" />
|
||||
<Error Condition="!Exists('..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.targets" Condition="Exists('..\packages\SpecFlow.NUnit.3.0.225\build\SpecFlow.NUnit.targets')" />
|
||||
<Import Project="..\packages\SpecFlow.3.1.97\build\SpecFlow.targets" Condition="Exists('..\packages\SpecFlow.3.1.97\build\SpecFlow.targets')" />
|
||||
<Import Project="..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.targets" Condition="Exists('..\packages\SpecFlow.NUnit.3.1.97\build\SpecFlow.NUnit.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">
|
||||
|
||||
@@ -1,25 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="BoDi" version="1.4.1" targetFramework="net472" />
|
||||
<package id="Cucumber.Messages" version="6.0.2" targetFramework="net472" />
|
||||
<package id="Gherkin" version="6.0.0" targetFramework="net472" />
|
||||
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" />
|
||||
<package id="Google.Protobuf" version="3.12.1" targetFramework="net472" />
|
||||
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" />
|
||||
<package id="NUnit" version="3.12.0" targetFramework="net472" />
|
||||
<package id="NUnit.Console" version="3.10.0" targetFramework="net472" />
|
||||
<package id="NUnit.ConsoleRunner" version="3.10.0" targetFramework="net472" />
|
||||
<package id="NUnit.Console" version="3.11.1" targetFramework="net472" />
|
||||
<package id="NUnit.ConsoleRunner" version="3.11.1" targetFramework="net472" />
|
||||
<package id="NUnit.Extension.NUnitProjectLoader" version="3.6.0" targetFramework="net472" />
|
||||
<package id="NUnit.Extension.NUnitV2Driver" version="3.7.0" targetFramework="net472" />
|
||||
<package id="NUnit.Extension.NUnitV2Driver" version="3.8.0" targetFramework="net472" />
|
||||
<package id="NUnit.Extension.NUnitV2ResultWriter" version="3.6.0" targetFramework="net472" />
|
||||
<package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net472" />
|
||||
<package id="NUnit.Extension.VSProjectLoader" version="3.8.0" targetFramework="net472" />
|
||||
<package id="NUnit.Runners" version="3.10.0" targetFramework="net472" />
|
||||
<package id="NUnit3TestAdapter" version="3.15.1" targetFramework="net472" />
|
||||
<package id="SpecFlow" version="3.0.225" targetFramework="net472" />
|
||||
<package id="SpecFlow.NUnit" version="3.0.225" targetFramework="net472" />
|
||||
<package id="SpecFlow.NUnit.Runners" version="3.0.225" targetFramework="net472" />
|
||||
<package id="System.Reflection.Emit" version="4.6.0" targetFramework="net472" />
|
||||
<package id="System.Reflection.Emit.Lightweight" version="4.6.0" targetFramework="net472" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
|
||||
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
||||
<package id="NUnit.Runners" version="3.11.1" targetFramework="net472" />
|
||||
<package id="NUnit3TestAdapter" version="3.16.1" targetFramework="net472" developmentDependency="true" />
|
||||
<package id="SpecFlow" version="3.1.97" targetFramework="net472" />
|
||||
<package id="SpecFlow.NUnit" version="3.1.97" targetFramework="net472" />
|
||||
<package id="SpecFlow.NUnit.Runners" version="3.1.97" targetFramework="net472" />
|
||||
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
|
||||
<package id="System.IO" version="4.3.0" targetFramework="net472" />
|
||||
<package id="System.Memory" version="4.5.4" targetFramework="net472" />
|
||||
<package id="System.Net.Http" version="4.3.4" targetFramework="net472" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||
<package id="System.Reflection.Emit" version="4.7.0" targetFramework="net472" />
|
||||
<package id="System.Reflection.Emit.Lightweight" version="4.7.0" targetFramework="net472" />
|
||||
<package id="System.Runtime" version="4.3.1" targetFramework="net472" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.1" targetFramework="net472" />
|
||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net472" />
|
||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net472" />
|
||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net472" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net472" />
|
||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
||||
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
|
||||
<package id="Utf8Json" version="1.3.7" targetFramework="net472" />
|
||||
</packages>
|
||||
@@ -66,5 +66,7 @@
|
||||
public TType VNCViewOnly { get; set; }
|
||||
public TType RdpVersion { get; set; }
|
||||
public TType UseEnhancedMode { get; set; }
|
||||
public TType SSHOptions { get; set; }
|
||||
public TType SSHTunnelConnectionName { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,6 +248,7 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests
|
||||
nameof(ConnectionInfo.MacAddress),
|
||||
nameof(ConnectionInfo.UserField),
|
||||
nameof(ConnectionInfo.Favorite),
|
||||
nameof(ConnectionInfo.SSHTunnelConnectionName),
|
||||
};
|
||||
|
||||
if (!isContainer)
|
||||
@@ -308,6 +309,7 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests
|
||||
nameof(ConnectionInfo.Username),
|
||||
nameof(ConnectionInfo.Password),
|
||||
nameof(ConnectionInfo.Port),
|
||||
nameof(ConnectionInfo.SSHOptions),
|
||||
nameof(ConnectionInfo.PuttySession)
|
||||
});
|
||||
break;
|
||||
|
||||
@@ -12,15 +12,19 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.5.0" newVersion="1.8.5.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.6.0" newVersion="1.8.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.9.2.0" newVersion="3.9.2.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.12.1.0" newVersion="3.12.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\ReportGenerator.4.3.0\build\netstandard2.0\ReportGenerator.props" Condition="Exists('..\packages\ReportGenerator.4.3.0\build\netstandard2.0\ReportGenerator.props')" />
|
||||
<Import Project="..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" />
|
||||
<Import Project="..\packages\ReportGenerator.4.5.8\build\netstandard2.0\ReportGenerator.props" Condition="Exists('..\packages\ReportGenerator.4.5.8\build\netstandard2.0\ReportGenerator.props')" />
|
||||
<Import Project="..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props')" />
|
||||
<Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -60,11 +60,11 @@
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.5.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
||||
<HintPath>..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll</HintPath>
|
||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.6.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
||||
<HintPath>..\packages\BouncyCastle.1.8.6.1\lib\BouncyCastle.Crypto.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
||||
<HintPath>..\packages\Castle.Core.4.4.1\lib\net45\Castle.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
|
||||
@@ -87,11 +87,11 @@
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.DirectoryServices" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
@@ -344,8 +344,8 @@
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.12.0\build\NUnit.props'))" />
|
||||
<Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props'))" />
|
||||
<Error Condition="!Exists('..\packages\ReportGenerator.4.3.0\build\netstandard2.0\ReportGenerator.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ReportGenerator.4.3.0\build\netstandard2.0\ReportGenerator.props'))" />
|
||||
<Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props'))" />
|
||||
<Error Condition="!Exists('..\packages\ReportGenerator.4.5.8\build\netstandard2.0\ReportGenerator.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ReportGenerator.4.5.8\build\netstandard2.0\ReportGenerator.props'))" />
|
||||
</Target>
|
||||
<!-- 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.
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
public static readonly string DefaultConnectionsPath = SettingsFileInfo.SettingsPath;
|
||||
public static readonly string DefaultConnectionsFile = "confCons.xml";
|
||||
public static readonly string DefaultConnectionsFileNew = "confConsNew.xml";
|
||||
public static readonly double ConnectionFileVersion = 2.7;
|
||||
public static readonly double ConnectionFileVersion = 2.8;
|
||||
}
|
||||
}
|
||||
@@ -8,14 +8,12 @@ namespace mRemoteNG.App
|
||||
{
|
||||
public static class Windows
|
||||
{
|
||||
private static AboutWindow _aboutForm;
|
||||
private static ActiveDirectoryImportWindow _adimportForm;
|
||||
private static HelpWindow _helpForm;
|
||||
private static ExternalToolsWindow _externalappsForm;
|
||||
private static PortScanWindow _portscanForm;
|
||||
private static ScreenshotManagerWindow _screenshotmanagerForm;
|
||||
private static UltraVNCWindow _ultravncscForm;
|
||||
private static ComponentsCheckWindow _componentscheckForm;
|
||||
private static ConnectionTreeWindow _treeForm;
|
||||
|
||||
internal static ConnectionTreeWindow TreeForm
|
||||
@@ -39,11 +37,6 @@ namespace mRemoteNG.App
|
||||
// ReSharper disable once SwitchStatementMissingSomeCases
|
||||
switch (windowType)
|
||||
{
|
||||
case WindowType.About:
|
||||
if (_aboutForm == null || _aboutForm.IsDisposed)
|
||||
_aboutForm = new AboutWindow();
|
||||
_aboutForm.Show(dockPanel);
|
||||
break;
|
||||
case WindowType.ActiveDirectoryImport:
|
||||
if (_adimportForm == null || _adimportForm.IsDisposed)
|
||||
_adimportForm = new ActiveDirectoryImportWindow();
|
||||
@@ -89,13 +82,6 @@ namespace mRemoteNG.App
|
||||
_ultravncscForm = new UltraVNCWindow();
|
||||
_ultravncscForm.Show(dockPanel);
|
||||
break;
|
||||
case WindowType.ComponentsCheck:
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
"Showing ComponentsCheck window", true);
|
||||
if (_componentscheckForm == null || _componentscheckForm.IsDisposed)
|
||||
_componentscheckForm = new ComponentsCheckWindow();
|
||||
_componentscheckForm.Show(dockPanel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -96,6 +96,10 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
connectionRecord.Domain = headers.Contains("Domain") ? connectionCsv[headers.IndexOf("Domain")] : "";
|
||||
connectionRecord.Hostname = headers.Contains("Hostname") ? connectionCsv[headers.IndexOf("Hostname")] : "";
|
||||
connectionRecord.VmId = headers.Contains("VmId") ? connectionCsv[headers.IndexOf("VmId")] : "";
|
||||
connectionRecord.SSHOptions =
|
||||
headers.Contains("SSHOptions") ? connectionCsv[headers.IndexOf("SSHOptions")] : "";
|
||||
connectionRecord.SSHTunnelConnectionName =
|
||||
headers.Contains("SSHTunnelConnectionName") ? connectionCsv[headers.IndexOf("SSHTunnelConnectionName")] : "";
|
||||
connectionRecord.PuttySession = headers.Contains("PuttySession") ? connectionCsv[headers.IndexOf("PuttySession")] : "";
|
||||
connectionRecord.LoadBalanceInfo = headers.Contains("LoadBalanceInfo")
|
||||
? connectionCsv[headers.IndexOf("LoadBalanceInfo")]
|
||||
@@ -480,6 +484,20 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
connectionRecord.Inheritance.Protocol = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritSSHTunnelConnectionName"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritSSHTunnelConnectionName")], out value))
|
||||
connectionRecord.Inheritance.SSHTunnelConnectionName = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritSSHOptions"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritSSHOptions")], out value))
|
||||
connectionRecord.Inheritance.SSHOptions = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPuttySession"))
|
||||
{
|
||||
bool value;
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
if (_saveFilter.SaveDomain)
|
||||
sb.Append("Domain;");
|
||||
|
||||
sb.Append("Hostname;Port;VmId;Protocol;PuttySession;ConnectToConsole;UseCredSsp;UseVmId;UseEnhancedMode;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;" +
|
||||
sb.Append("Hostname;Port;VmId;Protocol;SSHTunnelConnectionName;SSHOptions;PuttySession;ConnectToConsole;UseCredSsp;UseVmId;UseEnhancedMode;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;" +
|
||||
"LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;" +
|
||||
"CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectClipboard;RedirectSmartCards;RedirectSound;RedirectKeys;" +
|
||||
"PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;Favorite;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;" +
|
||||
@@ -66,7 +66,7 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
if (_saveFilter.SaveInheritance)
|
||||
sb.Append("InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;" +
|
||||
"InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;" +
|
||||
"InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;" +
|
||||
"InheritProtocol;InheritSSHTunnelConnectionName;InheritSSHOptions;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;" +
|
||||
"InheritRedirectClipboard;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;" +
|
||||
"InheritUseConsoleSession;InheritUseCredSsp;InheritUseVmId;InheritUseEnhancedMode;InheritVmId;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;" +
|
||||
"InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;" +
|
||||
@@ -119,6 +119,8 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
.Append(FormatForCsv(con.Port))
|
||||
.Append(FormatForCsv(con.VmId))
|
||||
.Append(FormatForCsv(con.Protocol))
|
||||
.Append(FormatForCsv(con.SSHTunnelConnectionName))
|
||||
.Append(FormatForCsv(con.SSHOptions))
|
||||
.Append(FormatForCsv(con.PuttySession))
|
||||
.Append(FormatForCsv(con.UseConsoleSession))
|
||||
.Append(FormatForCsv(con.UseCredSsp))
|
||||
@@ -186,6 +188,8 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
.Append(FormatForCsv(con.Inheritance.Password))
|
||||
.Append(FormatForCsv(con.Inheritance.Port))
|
||||
.Append(FormatForCsv(con.Inheritance.Protocol))
|
||||
.Append(FormatForCsv(con.Inheritance.SSHTunnelConnectionName))
|
||||
.Append(FormatForCsv(con.Inheritance.SSHOptions))
|
||||
.Append(FormatForCsv(con.Inheritance.PuttySession))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectDiskDrives))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectKeys))
|
||||
|
||||
@@ -91,6 +91,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
connectionInfo.VmId = (string)dataRow["VmId"];
|
||||
connectionInfo.UseEnhancedMode = (bool)dataRow["UseEnhancedMode"];
|
||||
connectionInfo.Protocol = (ProtocolType)Enum.Parse(typeof(ProtocolType), (string)dataRow["Protocol"]);
|
||||
connectionInfo.SSHTunnelConnectionName = (string)dataRow["SSHTunnelConnectionName"];
|
||||
connectionInfo.SSHOptions = (string)dataRow["SSHOptions"];
|
||||
connectionInfo.PuttySession = (string)dataRow["PuttySession"];
|
||||
connectionInfo.Port = (int)dataRow["Port"];
|
||||
connectionInfo.UseConsoleSession = (bool)dataRow["ConnectToConsole"];
|
||||
@@ -181,6 +183,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
connectionInfo.Inheritance.Password = (bool)dataRow["InheritPassword"];
|
||||
connectionInfo.Inheritance.Port = (bool)dataRow["InheritPort"];
|
||||
connectionInfo.Inheritance.Protocol = (bool)dataRow["InheritProtocol"];
|
||||
connectionInfo.Inheritance.SSHTunnelConnectionName = (bool)dataRow["InheritSSHTunnelConnectionName"];
|
||||
connectionInfo.Inheritance.SSHOptions = (bool)dataRow["InheritSSHOptions"];
|
||||
connectionInfo.Inheritance.PuttySession = (bool)dataRow["InheritPuttySession"];
|
||||
connectionInfo.Inheritance.RedirectDiskDrives = (bool)dataRow["InheritRedirectDiskDrives"];
|
||||
connectionInfo.Inheritance.RedirectKeys = (bool)dataRow["InheritRedirectKeys"];
|
||||
|
||||
@@ -109,9 +109,11 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
dataTable.Columns.Add("DomainName", typeof(string));
|
||||
dataTable.Columns.Add("Password", typeof(string));
|
||||
dataTable.Columns.Add("Hostname", typeof(string));
|
||||
dataTable.Columns.Add("Protocol", typeof(string));
|
||||
dataTable.Columns.Add("PuttySession", typeof(string));
|
||||
dataTable.Columns.Add("Port", typeof(int));
|
||||
dataTable.Columns.Add("Protocol", typeof(string));
|
||||
dataTable.Columns.Add("SSHTunnelConnectionName", typeof(string));
|
||||
dataTable.Columns.Add("SSHOptions", typeof(string));
|
||||
dataTable.Columns.Add("PuttySession", typeof(string));
|
||||
dataTable.Columns.Add("ConnectToConsole", typeof(bool));
|
||||
dataTable.Columns.Add("UseCredSsp", typeof(bool));
|
||||
dataTable.Columns.Add("RenderingEngine", typeof(string));
|
||||
@@ -168,6 +170,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
dataTable.Columns.Add("InheritPassword", typeof(bool));
|
||||
dataTable.Columns.Add("InheritPort", typeof(bool));
|
||||
dataTable.Columns.Add("InheritProtocol", typeof(bool));
|
||||
dataTable.Columns.Add("InheritSSHTunnelConnectionName", typeof(bool));
|
||||
dataTable.Columns.Add("InheritSSHOptions", typeof(bool));
|
||||
dataTable.Columns.Add("InheritPuttySession", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRedirectDiskDrives", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRedirectKeys", typeof(bool));
|
||||
@@ -497,6 +501,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
dataRow["Hostname"] = connectionInfo.Hostname;
|
||||
dataRow["VmId"] = connectionInfo.VmId;
|
||||
dataRow["Protocol"] = connectionInfo.Protocol;
|
||||
dataRow["SSHTunnelConnectionName"] = connectionInfo.SSHTunnelConnectionName;
|
||||
dataRow["SSHOptions"] = connectionInfo.SSHOptions;
|
||||
dataRow["PuttySession"] = connectionInfo.PuttySession;
|
||||
dataRow["Port"] = connectionInfo.Port;
|
||||
dataRow["ConnectToConsole"] = connectionInfo.UseConsoleSession;
|
||||
@@ -568,6 +574,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
dataRow["InheritPassword"] = connectionInfo.Inheritance.Password;
|
||||
dataRow["InheritPort"] = connectionInfo.Inheritance.Port;
|
||||
dataRow["InheritProtocol"] = connectionInfo.Inheritance.Protocol;
|
||||
dataRow["InheritSSHTunnelConnectionName"] = connectionInfo.Inheritance.SSHTunnelConnectionName;
|
||||
dataRow["InheritSSHOptions"] = connectionInfo.Inheritance.SSHOptions;
|
||||
dataRow["InheritPuttySession"] = connectionInfo.Inheritance.PuttySession;
|
||||
dataRow["InheritRedirectDiskDrives"] = connectionInfo.Inheritance.RedirectDiskDrives;
|
||||
dataRow["InheritRedirectKeys"] = connectionInfo.Inheritance.RedirectKeys;
|
||||
@@ -631,6 +639,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
||||
dataRow["InheritPassword"] = false;
|
||||
dataRow["InheritPort"] = false;
|
||||
dataRow["InheritProtocol"] = false;
|
||||
dataRow["InheritSSHTunnelConnectionName"] = false;
|
||||
dataRow["InheritSSHOptions"] = false;
|
||||
dataRow["InheritPuttySession"] = false;
|
||||
dataRow["InheritRedirectDiskDrives"] = false;
|
||||
dataRow["InheritRedirectKeys"] = false;
|
||||
|
||||
@@ -68,6 +68,8 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
|
||||
element.Add(new XAttribute("Hostname", connectionInfo.Hostname));
|
||||
element.Add(new XAttribute("Protocol", connectionInfo.Protocol));
|
||||
element.Add(new XAttribute("SSHTunnelConnectionName", connectionInfo.SSHTunnelConnectionName));
|
||||
element.Add(new XAttribute("SSHOptions", connectionInfo.SSHOptions));
|
||||
element.Add(new XAttribute("PuttySession", connectionInfo.PuttySession));
|
||||
element.Add(new XAttribute("Port", connectionInfo.Port));
|
||||
element.Add(new XAttribute("ConnectToConsole",
|
||||
@@ -185,6 +187,10 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
connectionInfo.Inheritance.Port.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritProtocol",
|
||||
connectionInfo.Inheritance.Protocol.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritSSHTunnelConnectionName",
|
||||
connectionInfo.Inheritance.SSHTunnelConnectionName.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritSSHOptions",
|
||||
connectionInfo.Inheritance.SSHOptions.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPuttySession",
|
||||
connectionInfo.Inheritance.PuttySession.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives",
|
||||
@@ -293,6 +299,8 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
element.Add(new XAttribute("InheritPassword", falseString));
|
||||
element.Add(new XAttribute("InheritPort", falseString));
|
||||
element.Add(new XAttribute("InheritProtocol", falseString));
|
||||
element.Add(new XAttribute("InheritSSHTunnelConnectionName", falseString));
|
||||
element.Add(new XAttribute("InheritSSHOptions", falseString));
|
||||
element.Add(new XAttribute("InheritPuttySession", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectKeys", falseString));
|
||||
|
||||
@@ -76,6 +76,8 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
element.Add(new XAttribute("Hostname", connectionInfo.Hostname));
|
||||
element.Add(new XAttribute("Protocol", connectionInfo.Protocol));
|
||||
element.Add(new XAttribute("RdpVersion", connectionInfo.RdpVersion.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("SSHTunnelConnectionName", connectionInfo.SSHTunnelConnectionName));
|
||||
element.Add(new XAttribute("SSHOptions", connectionInfo.SSHOptions));
|
||||
element.Add(new XAttribute("PuttySession", connectionInfo.PuttySession));
|
||||
element.Add(new XAttribute("Port", connectionInfo.Port));
|
||||
element.Add(new XAttribute("ConnectToConsole",
|
||||
@@ -197,6 +199,10 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
connectionInfo.Inheritance.Protocol.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRdpVersion",
|
||||
connectionInfo.Inheritance.RdpVersion.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritSSHTunnelConnectionName",
|
||||
connectionInfo.Inheritance.SSHTunnelConnectionName.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritSSHOptions",
|
||||
connectionInfo.Inheritance.SSHOptions.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPuttySession",
|
||||
connectionInfo.Inheritance.PuttySession.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives",
|
||||
@@ -316,6 +322,8 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
element.Add(new XAttribute("InheritPassword", falseString));
|
||||
element.Add(new XAttribute("InheritPort", falseString));
|
||||
element.Add(new XAttribute("InheritProtocol", falseString));
|
||||
element.Add(new XAttribute("InheritSSHTunnelConnectionName", falseString));
|
||||
element.Add(new XAttribute("InheritSSHOptions", falseString));
|
||||
element.Add(new XAttribute("InheritPuttySession", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectKeys", falseString));
|
||||
|
||||
@@ -533,8 +533,7 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
xmlnode.GetAttributeAsBool("InheritRDPMinutesToIdleTimeout");
|
||||
connectionInfo.RDPAlertIdleTimeout = xmlnode.GetAttributeAsBool("RDPAlertIdleTimeout");
|
||||
connectionInfo.Inheritance.RDPAlertIdleTimeout =
|
||||
xmlnode.GetAttributeAsBool("InheritRDPAlertIdleTimeout");
|
||||
}
|
||||
xmlnode.GetAttributeAsBool("InheritRDPAlertIdleTimeout"); }
|
||||
|
||||
if (_confVersion >= 2.7)
|
||||
{
|
||||
@@ -543,13 +542,17 @@ namespace mRemoteNG.Config.Serializers.Xml
|
||||
connectionInfo.UseVmId = xmlnode.GetAttributeAsBool("UseVmId");
|
||||
connectionInfo.VmId = xmlnode.GetAttributeAsString("VmId");
|
||||
connectionInfo.UseEnhancedMode = xmlnode.GetAttributeAsBool("UseEnhancedMode");
|
||||
connectionInfo.RdpVersion = xmlnode.GetAttributeAsEnum("RdpVersion", RdpVersion.Highest);
|
||||
connectionInfo.SSHTunnelConnectionName = xmlnode.GetAttributeAsString("SSHTunnelConnectionName");
|
||||
connectionInfo.SSHOptions = xmlnode.GetAttributeAsString("SSHOptions");
|
||||
connectionInfo.Inheritance.RedirectClipboard = xmlnode.GetAttributeAsBool("InheritRedirectClipboard");
|
||||
connectionInfo.Inheritance.Favorite = xmlnode.GetAttributeAsBool("InheritFavorite");
|
||||
connectionInfo.RdpVersion = xmlnode.GetAttributeAsEnum("RdpVersion", RdpVersion.Highest);
|
||||
connectionInfo.Inheritance.RdpVersion = xmlnode.GetAttributeAsBool("InheritRdpVersion");
|
||||
connectionInfo.Inheritance.UseVmId = xmlnode.GetAttributeAsBool("InheritUseVmId");
|
||||
connectionInfo.Inheritance.VmId = xmlnode.GetAttributeAsBool("InheritVmId");
|
||||
connectionInfo.Inheritance.UseEnhancedMode = xmlnode.GetAttributeAsBool("InheritUseEnhancedMode");
|
||||
connectionInfo.Inheritance.SSHTunnelConnectionName = xmlnode.GetAttributeAsBool("InheritSSHTunnelConnectionName");
|
||||
connectionInfo.Inheritance.SSHOptions = xmlnode.GetAttributeAsBool("InheritSSHOptions");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -27,11 +27,15 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
||||
ALTER TABLE tblCons
|
||||
ADD RedirectClipboard bit NOT NULL DEFAULT 0,
|
||||
InheritRedirectClipboard bit NOT NULL DEFAULT 0,
|
||||
VmId varchar NOT NULL DEFAULT 0,
|
||||
VmId varchar NOT NULL DEFAULT '',
|
||||
UseVmId bit NOT NULL DEFAULT 0,
|
||||
UseEnhancedMode bit NOT NULL DEFAULT 0,
|
||||
InheritVmId bit NOT NULL DEFAULT 0,
|
||||
InheritUseVmId bit NOT NULL DEFAULT 0,
|
||||
SSHTunnelConnectionName varchar NOT NULL DEFAULT '',
|
||||
InheritSSHTunnelConnectionName bit NOT NULL DEFAULT 0,
|
||||
SSHOptions varchar NOT NULL DEFAULT '',
|
||||
InheritSSHOptions bit NOT NULL DEFAULT 0,
|
||||
InheritUseEnhancedMode bit NOT NULL DEFAULT 0;
|
||||
UPDATE tblRoot
|
||||
SET ConfVersion='2.7'";
|
||||
|
||||
@@ -27,10 +27,12 @@ namespace mRemoteNG.Connection
|
||||
private string _vmId = "";
|
||||
private bool _useEnhancedMode;
|
||||
|
||||
private string _sshTunnelConnectionName = "";
|
||||
private ProtocolType _protocol;
|
||||
private RdpVersion _rdpProtocolVersion;
|
||||
private string _extApp;
|
||||
private int _port;
|
||||
private string _sshOptions = "";
|
||||
private string _puttySession;
|
||||
private IcaProtocol.EncryptionStrength _icaEncryption;
|
||||
private bool _useConsoleSession;
|
||||
@@ -194,6 +196,16 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _vmId, value?.Trim(), "VmId");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.strCategoryConnection), 2),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.strPropertyNameSSHTunnelConnection)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.strPropertyDescriptionSSHTunnelConnection)),
|
||||
TypeConverter(typeof(SshTunnelTypeConverter)),
|
||||
UsedInAllProtocolsExcept()]
|
||||
public string SSHTunnelConnectionName
|
||||
{
|
||||
get => GetPropertyValue("SSHTunnelConnectionName", _sshTunnelConnectionName).Trim();
|
||||
set => SetField(ref _sshTunnelConnectionName, value?.Trim(), "SSHTunnelConnectionName");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Protocol
|
||||
@@ -242,6 +254,16 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _puttySession, value, "PuttySession");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.strCategoryProtocol), 3),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.strPropertyNameSSHOptions)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.strPropertyDescriptionSSHOptions)),
|
||||
UsedInProtocol(ProtocolType.SSH1, ProtocolType.SSH2)]
|
||||
public virtual string SSHOptions
|
||||
{
|
||||
get => GetPropertyValue("SSHOptions", _sshOptions);
|
||||
set => SetField(ref _sshOptions, value, "SSHOptions");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.strCategoryProtocol), 3),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.strPropertyNameEncryptionStrength)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.strPropertyDescriptionEncryptionStrength)),
|
||||
|
||||
@@ -83,6 +83,13 @@ namespace mRemoteNG.Connection
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.strPropertyDescriptionPort)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool Port { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.strCategoryConnection), 3),
|
||||
LocalizedAttributes.LocalizedDisplayNameInheritAttribute(nameof(Language.strPropertyNameSSHTunnelConnection)),
|
||||
LocalizedAttributes.LocalizedDescriptionInheritAttribute(nameof(Language.strPropertyDescriptionSSHTunnelConnection)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
[Browsable(true)]
|
||||
public bool SSHTunnelConnectionName { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -112,6 +119,12 @@ namespace mRemoteNG.Connection
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool PuttySession { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.strCategoryProtocol), 4),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.strPropertyNameSSHOptions)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.strPropertyDescriptionSSHOptions)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool SSHOptions { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.strCategoryProtocol), 4),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.strPropertyNameEncryptionStrength)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.strPropertyDescriptionEncryptionStrength)),
|
||||
|
||||
@@ -5,6 +5,8 @@ using mRemoteNG.App;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.UI.Forms;
|
||||
using mRemoteNG.UI.Panels;
|
||||
using mRemoteNG.UI.Tabs;
|
||||
@@ -49,7 +51,8 @@ namespace mRemoteNG.Connection
|
||||
}
|
||||
}
|
||||
|
||||
public void OpenConnection(
|
||||
// async is necessary so UI can update while OpenConnection waits for tunnel connection to get ready in case of connection through SSH tunnel
|
||||
public async void OpenConnection(
|
||||
ConnectionInfo connectionInfo,
|
||||
ConnectionInfo.Force force = ConnectionInfo.Force.None,
|
||||
ConnectionWindow conForm = null)
|
||||
@@ -75,15 +78,137 @@ namespace mRemoteNG.Connection
|
||||
}
|
||||
|
||||
var protocolFactory = new ProtocolFactory();
|
||||
var newProtocol = protocolFactory.CreateProtocol(connectionInfo);
|
||||
|
||||
var connectionPanel = SetConnectionPanel(connectionInfo, force);
|
||||
if (string.IsNullOrEmpty(connectionPanel)) return;
|
||||
var connectionForm = SetConnectionForm(conForm, connectionPanel);
|
||||
var connectionContainer = SetConnectionContainer(connectionInfo, connectionForm);
|
||||
Control connectionContainer = null;
|
||||
|
||||
// Handle connection through SSH tunnel:
|
||||
// in case of connection through SSH tunnel, connectionInfo gets cloned, so that modification of its name, hostname and port do not modify the original connection info
|
||||
// connectionInfoOriginal points to the original connection info in either case, for where its needed later on.
|
||||
var connectionInfoOriginal = connectionInfo;
|
||||
ConnectionInfo connectionInfoSshTunnel = null; // SSH tunnel connection info will be set if SSH tunnel connection is configured, can be found and connected.
|
||||
if (!string.IsNullOrEmpty(connectionInfoOriginal.SSHTunnelConnectionName))
|
||||
{
|
||||
// Find the connection info specified as SSH tunnel in the connections tree
|
||||
connectionInfoSshTunnel = getSSHConnectionInfoByName(Runtime.ConnectionsService.ConnectionTreeModel.RootNodes, connectionInfoOriginal.SSHTunnelConnectionName);
|
||||
if (connectionInfoSshTunnel == null)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.strSSHTunnelConfigProblem, connectionInfoOriginal.Name, connectionInfoOriginal.SSHTunnelConnectionName));
|
||||
return;
|
||||
}
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg,
|
||||
$"SSH Tunnel connection '{connectionInfoOriginal.SSHTunnelConnectionName}' configured for '{connectionInfoOriginal.Name}' found. Finding free local port for use as local tunnel port ...");
|
||||
// determine a free local port to use as local tunnel port
|
||||
var l = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Loopback, 0);
|
||||
l.Start();
|
||||
var localSshTunnelPort = ((System.Net.IPEndPoint)l.LocalEndpoint).Port;
|
||||
l.Stop();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg,
|
||||
$"{localSshTunnelPort} will be used as local tunnel port. Establishing SSH connection to '{connectionInfoSshTunnel.Hostname}' with additional tunnel options for target connection ...");
|
||||
|
||||
// clone SSH tunnel connection as tunnel options will be added to it, and those changes shall not be saved to the configuration
|
||||
connectionInfoSshTunnel = connectionInfoSshTunnel.Clone();
|
||||
connectionInfoSshTunnel.SSHOptions += " -L " + localSshTunnelPort + ":" + connectionInfoOriginal.Hostname + ":" + connectionInfoOriginal.Port;
|
||||
|
||||
// clone target connection info as its hostname will be changed to localhost and port to local tunnel port to establish connection through tunnel, and those changes shall not be saved to the configuration
|
||||
connectionInfo = connectionInfoOriginal.Clone();
|
||||
connectionInfo.Name += " via " + connectionInfoSshTunnel.Name;
|
||||
connectionInfo.Hostname = "localhost";
|
||||
connectionInfo.Port = localSshTunnelPort;
|
||||
|
||||
// connect the SSH connection to setup the tunnel
|
||||
var protocolSshTunnel = protocolFactory.CreateProtocol(connectionInfoSshTunnel);
|
||||
if (!(protocolSshTunnel is PuttyBase puttyBaseSshTunnel))
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.strSSHTunnelIsNotPutty, connectionInfoOriginal.Name, connectionInfoSshTunnel.Name));
|
||||
return;
|
||||
}
|
||||
|
||||
SetConnectionFormEventHandlers(protocolSshTunnel, connectionForm);
|
||||
SetConnectionEventHandlers(protocolSshTunnel);
|
||||
connectionContainer = SetConnectionContainer(connectionInfo, connectionForm);
|
||||
BuildConnectionInterfaceController(connectionInfoSshTunnel, protocolSshTunnel, connectionContainer);
|
||||
protocolSshTunnel.InterfaceControl.OriginalInfo = connectionInfoSshTunnel;
|
||||
|
||||
if (protocolSshTunnel.Initialize() == false)
|
||||
{
|
||||
protocolSshTunnel.Close();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.strSSHTunnelNotInitialized, connectionInfoOriginal.Name, connectionInfoSshTunnel.Name));
|
||||
return;
|
||||
}
|
||||
|
||||
if (protocolSshTunnel.Connect() == false)
|
||||
{
|
||||
protocolSshTunnel.Close();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.strSSHTunnelNotConnected, connectionInfoOriginal.Name, connectionInfoSshTunnel.Name));
|
||||
return;
|
||||
}
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg,
|
||||
"Putty started for SSH connection for tunnel. Waiting for local tunnel port to become available ...");
|
||||
|
||||
// wait until SSH tunnel connection is ready, by checking if local port can be connected to, but max 60 sec.
|
||||
var testsock = new System.Net.Sockets.Socket(System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
|
||||
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
|
||||
while (stopwatch.ElapsedMilliseconds < 60000)
|
||||
{
|
||||
// confirm that SSH connection is still active
|
||||
// works only if putty is connfigured to always close window on exit
|
||||
// else, if connection attempt fails, window remains open and putty process remains running, and we cannot know that connection is already doomed
|
||||
// in this case the timeout will expire and the log message below will be created
|
||||
// awkward for user as he has already acknowledged the putty popup some seconds again when the below notification comes....
|
||||
if (!puttyBaseSshTunnel.isRunning())
|
||||
{
|
||||
protocolSshTunnel.Close();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.strSSHTunnelFailed, connectionInfoOriginal.Name, connectionInfoSshTunnel.Name));
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
testsock.Connect(System.Net.IPAddress.Loopback, localSshTunnelPort);
|
||||
testsock.Close();
|
||||
break;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await System.Threading.Tasks.Task.Delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
if (stopwatch.ElapsedMilliseconds >= 60000)
|
||||
{
|
||||
protocolSshTunnel.Close();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.strSSHTunnelPortNotReadyInTime, connectionInfoOriginal.Name, connectionInfoSshTunnel.Name));
|
||||
return;
|
||||
}
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg,
|
||||
"Local tunnel port is now available. Hiding putty display and setting up target connection via local tunnel port ...");
|
||||
|
||||
// hide the display of the SSH tunnel connection which has been shown until this time, such that password can be entered if required or errors be seen
|
||||
// it stays invisible in the container however which will be reused for the actual connection and such that if the container is closed the SSH tunnel connection is closed as well
|
||||
protocolSshTunnel.InterfaceControl.Hide();
|
||||
}
|
||||
|
||||
var newProtocol = protocolFactory.CreateProtocol(connectionInfo);
|
||||
SetConnectionFormEventHandlers(newProtocol, connectionForm);
|
||||
SetConnectionEventHandlers(newProtocol);
|
||||
// in case of connection through SSH tunnel the container is already defined and must be use, else it needs to be created here
|
||||
if (connectionContainer == null) connectionContainer = SetConnectionContainer(connectionInfo, connectionForm);
|
||||
BuildConnectionInterfaceController(connectionInfo, newProtocol, connectionContainer);
|
||||
// in case of connection through SSH tunnel the connectionInfo was modified but connectionInfoOriginal in all cases retains the original info
|
||||
// and is stored in interface control for further use
|
||||
newProtocol.InterfaceControl.OriginalInfo = connectionInfoOriginal;
|
||||
// SSH tunnel connection is stored in Interface Control to be used in log messages etc
|
||||
newProtocol.InterfaceControl.SSHTunnelInfo = connectionInfoSshTunnel;
|
||||
|
||||
newProtocol.Force = force;
|
||||
|
||||
@@ -99,7 +224,7 @@ namespace mRemoteNG.Connection
|
||||
return;
|
||||
}
|
||||
|
||||
connectionInfo.OpenConnections.Add(newProtocol);
|
||||
connectionInfoOriginal.OpenConnections.Add(newProtocol);
|
||||
_activeConnections.Add(connectionInfo.ConstantID);
|
||||
FrmMain.Default.SelectedConnection = connectionInfo;
|
||||
}
|
||||
@@ -109,6 +234,25 @@ namespace mRemoteNG.Connection
|
||||
}
|
||||
}
|
||||
|
||||
// recursively traverse the tree to find ConnectionInfo of a specific name
|
||||
private ConnectionInfo getSSHConnectionInfoByName(IEnumerable<ConnectionInfo> rootnodes, string SSHTunnelConnectionName)
|
||||
{
|
||||
ConnectionInfo result = null;
|
||||
foreach (var node in rootnodes)
|
||||
{
|
||||
if (node is ContainerInfo container)
|
||||
{
|
||||
result = getSSHConnectionInfoByName(container.Children, SSHTunnelConnectionName);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (node.Name == SSHTunnelConnectionName && (node.Protocol == ProtocolType.SSH1 || node.Protocol == ProtocolType.SSH2)) result = node;
|
||||
}
|
||||
if (result != null) break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#region Private
|
||||
private static void StartPreConnectionExternalApp(ConnectionInfo connectionInfo)
|
||||
{
|
||||
@@ -132,7 +276,7 @@ namespace mRemoteNG.Connection
|
||||
var tab = (ConnectionTab)dockContent;
|
||||
var ic = InterfaceControl.FindInterfaceControl(tab);
|
||||
if (ic == null) continue;
|
||||
if (ic.Info == connectionInfo)
|
||||
if (ic.Info == connectionInfo || ic.OriginalInfo == connectionInfo)
|
||||
return ic;
|
||||
}
|
||||
}
|
||||
@@ -221,11 +365,16 @@ namespace mRemoteNG.Connection
|
||||
}
|
||||
}
|
||||
|
||||
var strHostname = prot.InterfaceControl.OriginalInfo.Hostname;
|
||||
if (prot.InterfaceControl.SSHTunnelInfo != null)
|
||||
{
|
||||
strHostname += " via SSH Tunnel " + prot.InterfaceControl.SSHTunnelInfo.Name;
|
||||
}
|
||||
Runtime.MessageCollector.AddMessage(msgClass,
|
||||
string.Format(
|
||||
Language.strProtocolEventDisconnected,
|
||||
disconnectedMessage,
|
||||
prot.InterfaceControl.Info.Hostname,
|
||||
strHostname,
|
||||
prot.InterfaceControl.Info.Protocol.ToString()));
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -242,11 +391,11 @@ namespace mRemoteNG.Connection
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.strConnenctionCloseEvent,
|
||||
true);
|
||||
string connDetail;
|
||||
if (prot.InterfaceControl.Info.Hostname == "" &&
|
||||
if (prot.InterfaceControl.OriginalInfo.Hostname == "" &&
|
||||
prot.InterfaceControl.Info.Protocol == ProtocolType.IntApp)
|
||||
connDetail = prot.InterfaceControl.Info.ExtApp;
|
||||
else if (prot.InterfaceControl.Info.Hostname != "")
|
||||
connDetail = prot.InterfaceControl.Info.Hostname;
|
||||
else if (prot.InterfaceControl.OriginalInfo.Hostname != "")
|
||||
connDetail = prot.InterfaceControl.OriginalInfo.Hostname;
|
||||
else
|
||||
connDetail = "UNKNOWN";
|
||||
|
||||
@@ -254,13 +403,13 @@ namespace mRemoteNG.Connection
|
||||
string.Format(Language.strConnenctionClosedByUser, connDetail,
|
||||
prot.InterfaceControl.Info.Protocol,
|
||||
Environment.UserName));
|
||||
prot.InterfaceControl.Info.OpenConnections.Remove(prot);
|
||||
prot.InterfaceControl.OriginalInfo.OpenConnections.Remove(prot);
|
||||
if (_activeConnections.Contains(prot.InterfaceControl.Info.ConstantID))
|
||||
_activeConnections.Remove(prot.InterfaceControl.Info.ConstantID);
|
||||
|
||||
if (prot.InterfaceControl.Info.PostExtApp == "") return;
|
||||
var extA = Runtime.ExternalToolsService.GetExtAppByName(prot.InterfaceControl.Info.PostExtApp);
|
||||
extA?.Start(prot.InterfaceControl.Info);
|
||||
extA?.Start(prot.InterfaceControl.OriginalInfo);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -275,7 +424,7 @@ namespace mRemoteNG.Connection
|
||||
true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
string.Format(Language.strConnectionEventConnectedDetail,
|
||||
prot.InterfaceControl.Info.Hostname,
|
||||
prot.InterfaceControl.OriginalInfo.Hostname,
|
||||
prot.InterfaceControl.Info.Protocol, Environment.UserName,
|
||||
prot.InterfaceControl.Info.Description,
|
||||
prot.InterfaceControl.Info.UserField));
|
||||
@@ -290,7 +439,7 @@ namespace mRemoteNG.Connection
|
||||
var msg = string.Format(
|
||||
Language.strConnectionEventErrorOccured,
|
||||
errorMessage,
|
||||
prot.InterfaceControl.Info.Hostname,
|
||||
prot.InterfaceControl.OriginalInfo.Hostname,
|
||||
errorCode?.ToString() ?? "-");
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, msg);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,11 @@ namespace mRemoteNG.Connection
|
||||
{
|
||||
public ProtocolBase Protocol { get; set; }
|
||||
public ConnectionInfo Info { get; set; }
|
||||
// in case the connection is through a SSH tunnel the Info is a copy of original info with hostname and port number overwritten with localhost and local tunnel port
|
||||
// and the original Info is saved in the following variable
|
||||
public ConnectionInfo OriginalInfo { get; set; }
|
||||
// in case the connection is through a SSH tunnel the Info of the SSHTunnelConnection is also saved for reference in log messages etc.
|
||||
public ConnectionInfo SSHTunnelInfo { get; set; }
|
||||
|
||||
|
||||
public InterfaceControl(Control parent, ProtocolBase protocol, ConnectionInfo info)
|
||||
@@ -37,19 +42,24 @@ namespace mRemoteNG.Connection
|
||||
|
||||
public static InterfaceControl FindInterfaceControl(DockPanel DockPnl)
|
||||
{
|
||||
if (!(DockPnl.ActiveDocument is ConnectionTab ct)) return null;
|
||||
if (ct.Controls.Count < 1) return null;
|
||||
if (ct.Controls[0] is InterfaceControl ic)
|
||||
return ic;
|
||||
|
||||
// instead of repeating the code, call the routine using ConnectionTab if called by DockPanel
|
||||
if (DockPnl.ActiveDocument is ConnectionTab ct)
|
||||
return FindInterfaceControl(ct);
|
||||
return null;
|
||||
}
|
||||
|
||||
public static InterfaceControl FindInterfaceControl(ConnectionTab tab)
|
||||
{
|
||||
if (tab.Controls.Count < 1) return null;
|
||||
if (tab.Controls[0] is InterfaceControl ic)
|
||||
return ic;
|
||||
// if the tab has more than one controls and the second is an InterfaceControl than it must be a connection through SSH tunnel
|
||||
// and the first Control is the SSH tunnel connection and thus the second control must be returned.
|
||||
if (tab.Controls.Count > 1)
|
||||
{
|
||||
if (tab.Controls[1] is InterfaceControl ic1)
|
||||
return ic1;
|
||||
}
|
||||
if (tab.Controls[0] is InterfaceControl ic0)
|
||||
return ic0;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,11 @@ namespace mRemoteNG.Connection.Protocol
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public bool isRunning()
|
||||
{
|
||||
return !PuttyProcess.HasExited;
|
||||
}
|
||||
|
||||
public override bool Connect()
|
||||
{
|
||||
try
|
||||
@@ -136,6 +141,11 @@ namespace mRemoteNG.Connection.Protocol
|
||||
}
|
||||
|
||||
PuttyProcess.StartInfo.Arguments = arguments.ToString();
|
||||
// add additional SSH options, f.e. tunnel or noshell parameters that may be specified for the the connnection
|
||||
if (!string.IsNullOrEmpty(InterfaceControl.Info.SSHOptions))
|
||||
{
|
||||
PuttyProcess.StartInfo.Arguments += " " + InterfaceControl.Info.SSHOptions;
|
||||
}
|
||||
|
||||
PuttyProcess.EnableRaisingEvents = true;
|
||||
PuttyProcess.Exited += ProcessExited;
|
||||
|
||||
@@ -589,7 +589,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
_rdpClient.AdvancedSettings2.RedirectPrinters = connectionInfo.RedirectPrinters;
|
||||
_rdpClient.AdvancedSettings2.RedirectSmartCards = connectionInfo.RedirectSmartCards;
|
||||
_rdpClient.SecuredSettings2.AudioRedirectionMode = (int)connectionInfo.RedirectSound;
|
||||
_rdpClient.AdvancedSettings.DisableRdpdr = connectionInfo.RedirectClipboard ? 0 : 1;
|
||||
_rdpClient.AdvancedSettings6.RedirectClipboard = connectionInfo.RedirectClipboard;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
.. HowTo - Jump server / Bastion host with mRemoteNG
|
||||
|
||||
.. Need more information here to explain and work with hosts for jumps
|
||||
|
||||
**************************
|
||||
Jump server / Bastion host
|
||||
**************************
|
||||
|
||||
Introduction
|
||||
============
|
||||
This document will not go into details on what a bastion host or a jump server really is. Instead
|
||||
it will give you a howto for setting up the hosts so you can do the jump with mRemoteNG. If you need
|
||||
more information regarding the function of bastion host and jump server then see links mentioned below.
|
||||
|
||||
.. note::
|
||||
|
||||
The information below could probably be a lot better. If you have a better idea or easier
|
||||
way to work with bastion host and jump server, then please let us know.
|
||||
|
||||
References
|
||||
==========
|
||||
- `Wikipedia Bastion host <https://en.wikipedia.org/wiki/Bastion_host>`_
|
||||
- `Wikipedia Jump server <https://en.wikipedia.org/wiki/Jump_server>`_
|
||||
|
||||
Linux Server to target host
|
||||
===========================
|
||||
In this section we will use a Ubuntu 18.04 LTS to jump to another host both RDP and SSH.
|
||||
|
||||
Windows Server to target host
|
||||
=============================
|
||||
In this section we will use a Windows 2016 Server to jump to another host both RDP and SSH.
|
||||
13
mRemoteV1/Documentation/howtos/sshtunnel.rst
Normal file
13
mRemoteV1/Documentation/howtos/sshtunnel.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
*************
|
||||
SSH Tunneling
|
||||
*************
|
||||
|
||||
You can use any configured SSH connection to be used as a tunnel server for another connection.
|
||||
|
||||
.. figure:: /images/ssh_tunnel.png
|
||||
|
||||
If an SSH Tunnel is configured the connection is searched and if found a free local TCP port determined. The SSH tunnel connection
|
||||
is setup with additional parameters for the tunnel. The original connection info is copied and the copy is modified to connect
|
||||
to local host and the local TCP port and the target connection is opened.
|
||||
You can use the SSH connection attribute for additional SSH options. It can be used by all
|
||||
normal SSH connections as well to specify any additional options, e.g. to not start a shell which some SSH servers.
|
||||
@@ -39,7 +39,7 @@ Port 2179 must be open on Hyper-V server and on the machine you are connecting f
|
||||
netsh advfirewall firewall add rule name="VMRDP" dir=out action=allow protocol=TCP localport=2179 (outgoing)
|
||||
|
||||
In case you are facing "Unknown disconnection reason 3848" error when connecting, you need to configure a number of registry settings on your client and the Hyper-V Server to make the connection work.
|
||||
Tis problem occurs because of the CredSSP (Credential Security Service Provider) policy on the client and/or Hyper-V Server not allowing to authentication of remote users by default.
|
||||
This problem occurs because of the CredSSP (Credential Security Service Provider) policy on the client and/or Hyper-V Server not allowing to authentication of remote users by default.
|
||||
|
||||
.. note::
|
||||
|
||||
|
||||
BIN
mRemoteV1/Documentation/images/ssh_tunnel.png
Normal file
BIN
mRemoteV1/Documentation/images/ssh_tunnel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -32,7 +32,7 @@ Welcome to mRemoteNG's documentation!
|
||||
:maxdepth: 2
|
||||
:caption: HowTos
|
||||
|
||||
howtos/jumpservers.rst
|
||||
howtos/sshtunnel.rst
|
||||
howtos/external_tools.rst
|
||||
howtos/bulk_connections.rst
|
||||
howtos/vmrdp.rst
|
||||
|
||||
@@ -95,8 +95,6 @@ Additional tools that can be used and triggered in mRemoteNG.
|
||||
- Show external tools dialog (See: :ref:`external_tools`)
|
||||
* - Port Scan
|
||||
- Show port scan dialog (See: :ref:`port_scan`)
|
||||
* - Components Check
|
||||
- Show installed components requirements test
|
||||
* - Options
|
||||
- Opens mRemoteNG global settings and options dialog
|
||||
|
||||
|
||||
@@ -27,9 +27,6 @@ Options below are for the various settings for Startup/Exit of mRemoteNG.
|
||||
* - Allow only a single instance of the application (mRemoteNG restart required)
|
||||
- Off
|
||||
- Enforces and makes sure only a single instance of mRemoteNG is running on the computer
|
||||
* - Check proper installation of components at startup
|
||||
- Off
|
||||
- Opens the panel for Components Check on every startup
|
||||
|
||||
Appearance
|
||||
==========
|
||||
|
||||
BIN
mRemoteV1/Icons/Admin.ico
Normal file
BIN
mRemoteV1/Icons/Admin.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mRemoteV1/Icons/Console.ico
Normal file
BIN
mRemoteV1/Icons/Console.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
BIN
mRemoteV1/Icons/Infrastructure.ico
Normal file
BIN
mRemoteV1/Icons/Infrastructure.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mRemoteV1/Icons/Production.ico
Normal file
BIN
mRemoteV1/Icons/Production.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mRemoteV1/Icons/Staging.ico
Normal file
BIN
mRemoteV1/Icons/Staging.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
62
mRemoteV1/Properties/Settings.Designer.cs
generated
62
mRemoteV1/Properties/Settings.Designer.cs
generated
@@ -12,7 +12,7 @@ namespace mRemoteNG {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.7.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
@@ -1535,18 +1535,6 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool StartupComponentsCheck {
|
||||
get {
|
||||
return ((bool)(this["StartupComponentsCheck"]));
|
||||
}
|
||||
set {
|
||||
this["StartupComponentsCheck"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
@@ -2927,6 +2915,54 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool InhDefaultSSHTunnelConnectionName {
|
||||
get {
|
||||
return ((bool)(this["InhDefaultSSHTunnelConnectionName"]));
|
||||
}
|
||||
set {
|
||||
this["InhDefaultSSHTunnelConnectionName"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string ConDefaultSSHTunnelConnectionName {
|
||||
get {
|
||||
return ((string)(this["ConDefaultSSHTunnelConnectionName"]));
|
||||
}
|
||||
set {
|
||||
this["ConDefaultSSHTunnelConnectionName"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool InhDefaultSSHOptions {
|
||||
get {
|
||||
return ((bool)(this["InhDefaultSSHOptions"]));
|
||||
}
|
||||
set {
|
||||
this["InhDefaultSSHOptions"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string ConDefaultSSHOptions {
|
||||
get {
|
||||
return ((string)(this["ConDefaultSSHOptions"]));
|
||||
}
|
||||
set {
|
||||
this["ConDefaultSSHOptions"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
|
||||
@@ -380,9 +380,6 @@
|
||||
<Setting Name="UVNCSCPort" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">5500</Value>
|
||||
</Setting>
|
||||
<Setting Name="StartupComponentsCheck" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="XULRunnerPath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
@@ -728,6 +725,18 @@
|
||||
<Setting Name="InhDefaultRdpVersion" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="InhDefaultSSHTunnelConnectionName" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ConDefaultSSHTunnelConnectionName" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="InhDefaultSSHOptions" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ConDefaultSSHOptions" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="StartMinimized" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
|
||||
7338
mRemoteV1/Resources/Language/Language.Designer.cs
generated
7338
mRemoteV1/Resources/Language/Language.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -2678,6 +2678,30 @@ Development umfasst Alphas, Betas und Release Candidates.</value>
|
||||
<data name="strPropertyDescriptionRdpVersion" xml:space="preserve">
|
||||
<value>Legt die Version des RDP fest, die beim Öffnen von Verbindungen verwendet wird.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionSSHTunnelConnection" xml:space="preserve">
|
||||
<value>Zum Verbinden mittels eines SSH Tunnels (Jump Host) geben Sie hier den Namen der SSH Verbindung an, welche benutzt werden soll um den SSH Tunnel einzurichten.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionSSHOptions" xml:space="preserve">
|
||||
<value>Geben Sie hier zusaetzliche Optionen an welche fuer die SSH Verbindung verwendet werden sollen. Fuer weitere Infos zu den moeglichen Optionen konsultieren sie die Putty Dokumentation.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelConfigProblem" xml:space="preserve">
|
||||
<value>Konfigurationsfehler der Verbindung. Verbindung zu: "{0}" via SSH Tunnel: "{1}" nicht möglich. Eine Verbindung mit dem als SSH Tunnel konfiguriertem Namen konnte nicht gefunden werden. Löschen Sie die SSH Tunnel Konfiguration or geben sie eine existierende SSH Verbindung an, welche zum Aufbau eine Tunnels zum Erreichen des eigentlichen Zielsystems verwendet werden soll.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelIsNotPutty" xml:space="preserve">
|
||||
<value>Konfigurationsfehler des SSH Tunnel. Verbindung zu: "{0}" via SSH Tunnel: "{1}" nicht möglich. Die als SSH Tunnel konfigurierte Verbindung wurde zwar gefunden, aber das zugehörige Protokoll ist nicht von Putty abgeleitet. Stellen Sie sicher dass die als SSH Tunnel konfigurierte Verbindung das SSH version 1 oder 2 Protokoll verwendet.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelNotInitialized" xml:space="preserve">
|
||||
<value>Initialisierungsproblem des SSH Tunnel. Verbindung zu: "{0}" via SSH Tunnel: "{1}" nicht möglich. Initialisierung der SSH Verbindung fehlgeschlagen. Überprüfen Sie die als SSH Tunnel konfigurierte Verbindung auf etwaige Probleme.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelNotConnected" xml:space="preserve">
|
||||
<value>Verbindungsproblem des SSH Tunnel. Verbindung zu: "{0}" via SSH Tunnel: "{1}" nicht möglich. SSH Verbindungsaufbau fehlgeschlagen. Überprüfen Sie die als SSH Tunnel konfigurierte Verbindung auf etwaige Probleme.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelFailed" xml:space="preserve">
|
||||
<value>SSH Tunnel Verbindung fehlgeschlagen. Verbindung zu: "{0}" via SSH Tunnel: "{1}" nicht möglich. Putty Prozess vorzeitig beendet. Überprüfen Sie die als SSH Tunnel konfigurierte Verbindung auf etwaige Probleme.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelPortNotReadyInTime" xml:space="preserve">
|
||||
<value>Zeitüberschreitung des SSH Tunnel. Verbindung zu: "{0}" via SSH Tunnel: "{1}" nicht möglich. Lokaler Tunnel Port nicht vor Ablauf der Zeitüberschreitung verfügbar. Überprüfen Sie die als SSH Tunnel konfigurierte Verbindung auf etwaige Probleme.</value>
|
||||
</data>
|
||||
<data name="strStartMinimized" xml:space="preserve">
|
||||
<value>Minimiert starten</value>
|
||||
</data>
|
||||
@@ -2687,4 +2711,7 @@ Development umfasst Alphas, Betas und Release Candidates.</value>
|
||||
<data name="strCloseToSysTray" xml:space="preserve">
|
||||
<value>In den System Tray schließen</value>
|
||||
</data>
|
||||
<data name="strLicense" xml:space="preserve">
|
||||
<value>Lizenz</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -59,7 +59,7 @@
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
|
||||
<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>
|
||||
@@ -105,15 +105,15 @@
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<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>
|
||||
@@ -576,7 +576,7 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
|
||||
<value>Basique</value>
|
||||
</data>
|
||||
<data name="strEncryptCompleteConnectionFile" xml:space="preserve">
|
||||
<value>Crypter complètement le fichier de connexion</value>
|
||||
<value>Chiffrer complètement le fichier de connexion</value>
|
||||
</data>
|
||||
<data name="strEndIP" xml:space="preserve">
|
||||
<value>IP de fin</value>
|
||||
@@ -1243,7 +1243,7 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous
|
||||
<value>Entrez votre mot de passe.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionPort" xml:space="preserve">
|
||||
<value>Entrez le port d'écoute du protocole choisit</value>
|
||||
<value>Entrez le port d'écoute du protocole choisi</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionProtocol" xml:space="preserve">
|
||||
<value>Choisissez le protocole utilisé par mRemoteNG pour se connecter à l'hôte.</value>
|
||||
@@ -2147,4 +2147,7 @@ Message:
|
||||
<data name="strYes" xml:space="preserve">
|
||||
<value>Oui</value>
|
||||
</data>
|
||||
<data name="strCredits" xml:space="preserve">
|
||||
<value>Crédits</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -305,10 +305,7 @@ If you are still not able to pass this check or use the Gecko Engine in mRemoteN
|
||||
<value>GeckoFx was found and seems to be installed properly.</value>
|
||||
</data>
|
||||
<data name="strCcICAFailed" xml:space="preserve">
|
||||
<value>ICA requires that the XenDesktop Online Plugin is installed and that the wfica.ocx library is registered. You can download the client here: http://www.citrix.com/download/
|
||||
If you have the XenDesktop Online Plugin installed and the check still fails, try to register wfica.ocx manually.
|
||||
To do this open up the run dialog (Start - Run) and enter the following: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (Where c:\Program Files\Citrix\ICA Client\ is the path to your XenDesktop Online Plugin installation).
|
||||
If you are still not able to pass this check or use ICA in mRemoteNG please consult the at {0}.</value>
|
||||
<value>ICA requires that the XenDesktop Online Plugin is installed and that the wfica.ocx library is registered. You can download the client here: http://www.citrix.com/download/</value>
|
||||
</data>
|
||||
<data name="strCcICAOK" xml:space="preserve">
|
||||
<value>All ICA components were found and seem to be registered properly.
|
||||
@@ -2813,6 +2810,36 @@ Development Channel includes Alphas, Betas & Release Candidates.</value>
|
||||
<data name="RdpProtocolVersionNotSupported" xml:space="preserve">
|
||||
<value>Could not create RDP client. RDP protocol version {0} is not supported on this machine. Please choose an older protocol version.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionSSHTunnelConnection" xml:space="preserve">
|
||||
<value>For connection through a SSH tunnel (jump host) specify SSH connection to be used to establish SSH tunnel.</value>
|
||||
</data>
|
||||
<data name="strPropertyNameSSHTunnelConnection" xml:space="preserve">
|
||||
<value>SSH Tunnel</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionSSHOptions" xml:space="preserve">
|
||||
<value>Specify here additional options to be used for SSH connection. See putty documentation for further details.</value>
|
||||
</data>
|
||||
<data name="strPropertyNameSSHOptions" xml:space="preserve">
|
||||
<value>SSH Options</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelConfigProblem" xml:space="preserve">
|
||||
<value>Connection configuration problem. Connection to: "{0}" via SSH Tunnel: "{1}" not possible. A connection with the name configured as SSH Tunnel and protocol SSH version 1 or SSH2 version 2 cannot be found in the connection tree. Clear SSH Tunnel configuration or specify existing SSH connection.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelIsNotPutty" xml:space="preserve">
|
||||
<value>SSH tunnel configuration problem. Connection to: "{0}" via SSH Tunnel: "{1}" not possible. Connection configured as SSH Tunnel found in tree, but protocol is not derived from putty. Make sure connection configured as SSH Tunnel is using SSH protocol.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelNotInitialized" xml:space="preserve">
|
||||
<value>SSH tunnel initialization problem. Connection to: "{0}" via SSH Tunnel: "{1}" not possible. SSH connection could not be initialized. Check for any problems with the connection configured as SSH Tunnel.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelNotConnected" xml:space="preserve">
|
||||
<value>SSH tunnel connection problem. Connection to: "{0}" via SSH Tunnel: "{1}" not possible. SSH connection failed. Check for any problems with the connection configured as SSH Tunnel.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelFailed" xml:space="preserve">
|
||||
<value>SSH tunnel connection failed. Connection to: "{0}" via SSH Tunnel: "{1}" not possible. Putty process terminated. Check for any problems with the connection configured as SSH Tunnel.</value>
|
||||
</data>
|
||||
<data name="strSSHTunnelPortNotReadyInTime" xml:space="preserve">
|
||||
<value>SSH tunnel connection timed out. Connection to: "{0}" via SSH Tunnel: "{1}" not possible. Local tunnel port did not become available in time. Check for any problems with the connection configured as SSH Tunnel.</value>
|
||||
</data>
|
||||
<data name="strStartMinimized" xml:space="preserve">
|
||||
<value>Start minimized</value>
|
||||
</data>
|
||||
@@ -2840,6 +2867,15 @@ Development Channel includes Alphas, Betas & Release Candidates.</value>
|
||||
<data name="strPowerShell" xml:space="preserve">
|
||||
<value>PowerShell</value>
|
||||
</data>
|
||||
<data name="strChangelog" xml:space="preserve">
|
||||
<value>Changelog</value>
|
||||
</data>
|
||||
<data name="strCredits" xml:space="preserve">
|
||||
<value>Credits</value>
|
||||
</data>
|
||||
<data name="strLicense" xml:space="preserve">
|
||||
<value>License</value>
|
||||
</data>
|
||||
<data name="strHttpCEF" xml:space="preserve">
|
||||
<value>CEF (Chromium)</value>
|
||||
</data>
|
||||
|
||||
@@ -36,18 +36,17 @@
|
||||
<xs:attribute name="Descr" type="xs:string" use="required" />
|
||||
<xs:attribute name="Icon" type="xs:string" use="required" />
|
||||
<xs:attribute name="Panel" type="xs:string" use="required" />
|
||||
|
||||
<!--<xs:attribute name="CredentialId" type="xs:string" use="required" />-->
|
||||
<xs:attribute name="Username" type="xs:string" use="required" />
|
||||
<xs:attribute name="Domain" type="xs:string" use="required" />
|
||||
<xs:attribute name="Password" type="xs:string" use="required" />
|
||||
|
||||
<xs:attribute name="Hostname" type="xs:string" use="required" />
|
||||
<xs:attribute name="Protocol" type="xs:string" use="required" />
|
||||
<xs:attribute name="RdpVersion" type="xs:string" use="required" />
|
||||
<xs:attribute name="VmId" type="xs:string" use="required" />
|
||||
<xs:attribute name="UseVmId" type="xs:boolean" use="required" />
|
||||
<xs:attribute name="UseEnhancedMode" type="xs:boolean" use="required" />
|
||||
<xs:attribute name="SSHTunnelConnectionName" type="xs:string" use="optional" />
|
||||
<xs:attribute name="SSHOptions" type="xs:string" use="optional" />
|
||||
<xs:attribute name="PuttySession" type="xs:string" use="required" />
|
||||
<xs:attribute name="Port" type="xs:int" use="required" />
|
||||
<xs:attribute name="ConnectToConsole" type="xs:boolean" use="required" />
|
||||
@@ -114,6 +113,8 @@
|
||||
<xs:attribute name="InheritPort" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritProtocol" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritRdpVersion" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritSSHTunnelConnectionName" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritSSHOptions" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritPuttySession" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritRedirectDiskDrives" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="InheritRedirectKeys" type="xs:boolean" use="optional" />
|
||||
|
||||
39
mRemoteV1/Tools/ADhelper.cs
Normal file
39
mRemoteV1/Tools/ADhelper.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.DirectoryServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace mRemoteNG.Tools
|
||||
{
|
||||
public class ADhelper
|
||||
{
|
||||
private DirectoryEntry _dEntry;
|
||||
|
||||
public ADhelper(string domain)
|
||||
{
|
||||
Children = new Hashtable();
|
||||
Domain = domain;
|
||||
}
|
||||
|
||||
public Hashtable Children { get; }
|
||||
|
||||
private string Domain { get; }
|
||||
|
||||
public void GetChildEntries(string adPath = "")
|
||||
{
|
||||
_dEntry = adPath.Length <= 0
|
||||
? Domain.Length <= 0 ? new DirectoryEntry() : new DirectoryEntry("LDAP://" + Domain)
|
||||
: new DirectoryEntry(adPath);
|
||||
try
|
||||
{
|
||||
foreach (DirectoryEntry child in _dEntry.Children)
|
||||
Children.Add(child.Name, child.Path);
|
||||
}
|
||||
catch (COMException ex)
|
||||
{
|
||||
if (ex.Message.ToLower().Equals("the server is not operational"))
|
||||
throw new Exception("Could not find AD Server", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
58
mRemoteV1/Tools/SSHTunnelTypeConverter.cs
Normal file
58
mRemoteV1/Tools/SSHTunnelTypeConverter.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Container;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace mRemoteNG.Tools
|
||||
{
|
||||
public class SshTunnelTypeConverter : StringConverter
|
||||
{
|
||||
public static string[] SshTunnels
|
||||
{
|
||||
get
|
||||
{
|
||||
var sshTunnelList = new List<string> {string.Empty};
|
||||
|
||||
// Add a blank entry to signify that no external tool is selected
|
||||
sshTunnelList.AddRange(GetSshConnectionNames(Runtime.ConnectionsService.ConnectionTreeModel.RootNodes));
|
||||
return sshTunnelList.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
// recursively traverse the connection tree to find all ConnectionInfo s of type SSH
|
||||
private static IEnumerable<string> GetSshConnectionNames(IEnumerable<ConnectionInfo> rootnodes)
|
||||
{
|
||||
var result = new List<string>();
|
||||
foreach (var node in rootnodes)
|
||||
if (node is ContainerInfo container)
|
||||
{
|
||||
result.AddRange(GetSshConnectionNames(container.Children));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (node is PuttySessionInfo) continue;
|
||||
if (node.Protocol == ProtocolType.SSH1 || node.Protocol == ProtocolType.SSH2)
|
||||
result.Add(node.Name);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
|
||||
{
|
||||
return new StandardValuesCollection(SshTunnels);
|
||||
}
|
||||
|
||||
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
73
mRemoteV1/UI/Controls/AdTree.Designer.cs
generated
Normal file
73
mRemoteV1/UI/Controls/AdTree.Designer.cs
generated
Normal file
@@ -0,0 +1,73 @@
|
||||
namespace mRemoteNG.UI.Controls
|
||||
{
|
||||
partial class AdTree
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdTree));
|
||||
this.tvActiveDirectory = new System.Windows.Forms.TreeView();
|
||||
this.ImglTree = new System.Windows.Forms.ImageList(this.components);
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tvActiveDirectory
|
||||
//
|
||||
this.tvActiveDirectory.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tvActiveDirectory.Location = new System.Drawing.Point(0, 0);
|
||||
this.tvActiveDirectory.Name = "tvActiveDirectory";
|
||||
this.tvActiveDirectory.Size = new System.Drawing.Size(800, 450);
|
||||
this.tvActiveDirectory.TabIndex = 0;
|
||||
this.tvActiveDirectory.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.TvActiveDirectory_AfterExpand);
|
||||
this.tvActiveDirectory.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvActiveDirectory_AfterSelect);
|
||||
//
|
||||
// ImglTree
|
||||
//
|
||||
this.ImglTree.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ImglTree.ImageStream")));
|
||||
this.ImglTree.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.ImglTree.Images.SetKeyName(0, "Root.png");
|
||||
this.ImglTree.Images.SetKeyName(1, "OU.png");
|
||||
this.ImglTree.Images.SetKeyName(2, "Folder.png");
|
||||
this.ImglTree.Images.SetKeyName(3, "Question.png");
|
||||
//
|
||||
// AdTree
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.tvActiveDirectory);
|
||||
this.Name = "AdTree";
|
||||
this.Size = new System.Drawing.Size(800, 450);
|
||||
this.Load += new System.EventHandler(this.AdTree_Load);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TreeView tvActiveDirectory;
|
||||
private System.Windows.Forms.ImageList ImglTree;
|
||||
}
|
||||
}
|
||||
123
mRemoteV1/UI/Controls/AdTree.cs
Normal file
123
mRemoteV1/UI/Controls/AdTree.cs
Normal file
@@ -0,0 +1,123 @@
|
||||
using mRemoteNG.Tools;
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace mRemoteNG.UI.Controls
|
||||
{
|
||||
public partial class AdTree : UserControl
|
||||
{
|
||||
#region Public Methods
|
||||
|
||||
public AdTree()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public event AdPathChangedEventHandler AdPathChanged;
|
||||
|
||||
public delegate void AdPathChangedEventHandler(object sender);
|
||||
|
||||
public string AdPath { get; set; }
|
||||
|
||||
public string Domain
|
||||
{
|
||||
private get => string.IsNullOrEmpty(_domain) == false ? _domain : Environment.UserDomainName;
|
||||
set => _domain = value;
|
||||
}
|
||||
|
||||
public object SelectedNode { get; internal set; }
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private string _domain;
|
||||
|
||||
private void TvActiveDirectory_AfterExpand(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (TreeNode node in e.Node.Nodes)
|
||||
AddTreeNodes(node);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
private void TvActiveDirectory_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
AdPath = e.Node.Tag.ToString();
|
||||
var pathChangedEvent = AdPathChanged;
|
||||
pathChangedEvent?.Invoke(this);
|
||||
}
|
||||
|
||||
private void AdTree_Load(object sender, EventArgs e)
|
||||
{
|
||||
tvActiveDirectory.Nodes.Clear();
|
||||
var treeNode = new TreeNode(Domain) { Tag = "" };
|
||||
tvActiveDirectory.Nodes.Add(treeNode);
|
||||
AddTreeNodes(treeNode);
|
||||
tvActiveDirectory.Nodes[0].Expand();
|
||||
}
|
||||
|
||||
private void AddTreeNodes(TreeNode tNode)
|
||||
{
|
||||
var adhelper = new ADhelper(Domain);
|
||||
adhelper.GetChildEntries(tNode.Tag.ToString());
|
||||
var enumerator = adhelper.Children.GetEnumerator();
|
||||
tvActiveDirectory.BeginUpdate();
|
||||
while (enumerator.MoveNext())
|
||||
{
|
||||
var flag1 = false;
|
||||
if (enumerator.Key == null) continue;
|
||||
var node1 = new TreeNode(enumerator.Key.ToString().Substring(3))
|
||||
{
|
||||
Tag = RuntimeHelpers.GetObjectValue(enumerator.Value)
|
||||
};
|
||||
if (!enumerator.Key.ToString().Substring(0, 2).Equals("CN") ||
|
||||
enumerator.Key.ToString().Equals("CN=Computers") ||
|
||||
enumerator.Key.ToString().Equals("CN=Users"))
|
||||
flag1 = true;
|
||||
|
||||
if (flag1)
|
||||
{
|
||||
var flag2 = false;
|
||||
try
|
||||
{
|
||||
foreach (TreeNode node2 in tNode.Nodes)
|
||||
{
|
||||
if (!node2.Text.Equals(node1.Text)) continue;
|
||||
flag2 = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
}
|
||||
|
||||
if (!flag2)
|
||||
tNode.Nodes.Add(node1);
|
||||
}
|
||||
|
||||
var imageIndex = GetImageIndex(enumerator.Key.ToString().Substring(0, 2));
|
||||
node1.ImageIndex = imageIndex;
|
||||
node1.SelectedImageIndex = imageIndex;
|
||||
}
|
||||
|
||||
tvActiveDirectory.EndUpdate();
|
||||
}
|
||||
|
||||
private static int GetImageIndex(string objType)
|
||||
{
|
||||
if (objType.Equals("CN"))
|
||||
return 2;
|
||||
return objType.Equals("OU") ? 1 : 3;
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
183
mRemoteV1/UI/Controls/AdTree.resx
Normal file
183
mRemoteV1/UI/Controls/AdTree.resx
Normal file
@@ -0,0 +1,183 @@
|
||||
<?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>
|
||||
<metadata name="ImglTree.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="ImglTree.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA4
|
||||
DAAAAk1TRnQBSQFMAgEBBAEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ACAAC/wH0
|
||||
A/MC9AL/CwAB9AH3AQcB/yYAAf8B9AHxAbsBtAGtAc8BtAG1AfEC/wcAA/8CtAEHAf8lAAL/AfABiwFl
|
||||
AYYBrQHPAa0BhgGtAd0B/wUAAv8B8wHwAbUBuwGRAZIB8gH0Af8CAAHsAesBbQHqARMBFQERAQ8HDgEA
|
||||
AewB6wFtAeoBEwEVAREBDwcOAwAB/wGLAQ0BiwG0AgkBtAHPAWwBiwH/BAAB/wHyAfcB7AHtAbUBCQG0
|
||||
AesB7AH3AfEB/wEAAewBmgF6AVgFUgFRAUsBKgJLAQ8BAAHsAZoBegFYBVIBUQFLASoCSwEPAwABtQFm
|
||||
AWwBrgGRA7UBrgFsAWYBtAMAAf8BvAGRArUBuwEJARkBCQG1AbQB6wHsAfAB/wHsAaABmgF5AhUBUgF6
|
||||
AVkBSwEAASoBMQFLAREBAAHsAaACmgR6AVkBUwJSATEBSwERAgAB8gFsAe8BtQKLAbUBCQG1AWwBZgJl
|
||||
AfIBAAH/AbwBtQEJAhkBCQGmAa0CGQEJAbUBrgHsAfEB7AEaAaABSgJ5AUoBegFZAQABUgEAAVIBKgFD
|
||||
AQAB7AEaAaACmgN6AlkBUwJSASoBQwEAAfQB7QFlAZEBrQGmAa0BCQH/AbsBiwFlAmYBrgL0AbUBCQMZ
|
||||
AbUBCgFlAxkBCQG1AesBkgHtAcMBoAEAApoBAAJ6AQABWQEAAVIBMQEUAQAB7QHDAqACmgN6AlkBUwFS
|
||||
ATEBFAEAAfMBZgFlAaYCrAGtAgkBtAKLAZEBbAFmAfEBBwEJBRkBuwEJBBkBCQG1AW0B7QHDAaABSgGZ
|
||||
AXkBSgJ6AQABWQEAAVIBMQESAQAB7QHDAqACmgR6AlkBUgExARIBAAHxAmUBigGsAbMB2wG6AbMBrAGK
|
||||
AbQBBwGRAWYBvAEHBRkB9AG0AQkB/wQZAbsB6wEcAsMBmQIUAXkCegEAAXoBAAFSATEB6gEAARwDwwGg
|
||||
ApoEegFZAVIBMQHqAQAB8QKmAa0BswHbARkB3AGtAqwBiwGRAa4BZgG8AQcBGQH0AxkB/wG1AYYBGQH0
|
||||
AxkBCQHsARwDwwKgApoEegFZAVIB6wEAARwDwwKgApoEegFZAVIB6wEAAfQBiwGGAdUC3AEZAdsCswKt
|
||||
AosBbAHyAbwF9AEZAf8CpgEJAfQCGQEJAe0BHAXDAqACmgR6AesBAAEcBcMCoAKaBHoB6wEAAf8BCQGt
|
||||
AdsB3AIZAdwB1QIJAa0CiwGSAf8B8AH0Af8B9AH/AbQBpgEJAa4BXwG0Av8B9AG7AbwKHATtAewBAAoc
|
||||
BO0B7AIAAf8BzgG0AfAB9AH/ARkB3AHdAQkBswGLAWYB9AEAAfQB8gP/AbUBXwEJAYYBXwG7Av8B8wHv
|
||||
AfQBHAEaAsMBoAGaARwB8QgAARwBGgLDAaABmgEcAfEKAAHzAYsBBwL/AfQCCQK0AYsBvAMAAvMD/wG1
|
||||
Aa0BhgG1Av8B9AG8AfQBAAHxBRwB8QkAAfEFHAHxDAAB8wG0AbsB8gHwAbsCtAGLAfAFAALzB/8B9AHw
|
||||
Af8mAAH/AfACtAGRAbQBCQH/BwAB/wLzAfQB9gH/AfQB8wH0Af8jAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||
ASADAAEBAQABAQYAAQEWAAP/gQAB4AEHAf8BDwT/AcABAwH4AQ8E/wGAAQMB4AEDAQABAQEAAQEBwAED
|
||||
AcABAQEAAQEBAAEBAcABAwGAAgABAQEAAQEBgAEBAwABAQEAAQEFAAEBAQABAQUAAQEBAAEBBQABAQEA
|
||||
AQEFAAEBAQABAQUAAQEBAAEBBQABAQEAAQEBgAEBAwAB/wEAAf8BwAEDAYACAQH/AQEB/wHgAQcBwAED
|
||||
BP8B8AEPAeABBwT/Cw==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
174
mRemoteV1/UI/Forms/FrmAbout.Designer.cs
generated
Normal file
174
mRemoteV1/UI/Forms/FrmAbout.Designer.cs
generated
Normal file
@@ -0,0 +1,174 @@
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class FrmAbout
|
||||
{
|
||||
#region Windows Form Designer generated code
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAbout));
|
||||
this.pbLogo = new System.Windows.Forms.PictureBox();
|
||||
this.pnlBottom = new System.Windows.Forms.Panel();
|
||||
this.llCredits = new System.Windows.Forms.LinkLabel();
|
||||
this.llChangelog = new System.Windows.Forms.LinkLabel();
|
||||
this.llLicense = new System.Windows.Forms.LinkLabel();
|
||||
this.lblTitle = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblVersion = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblLicense = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblCopyright = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit();
|
||||
this.pnlBottom.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pbLogo
|
||||
//
|
||||
this.pbLogo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(52)))), ((int)(((byte)(58)))), ((int)(((byte)(64)))));
|
||||
this.pbLogo.BackgroundImage = global::mRemoteNG.Resources.Header_dark;
|
||||
this.pbLogo.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
||||
this.pbLogo.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.pbLogo.Location = new System.Drawing.Point(0, 0);
|
||||
this.pbLogo.Name = "pbLogo";
|
||||
this.pbLogo.Size = new System.Drawing.Size(584, 120);
|
||||
this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.pbLogo.TabIndex = 1;
|
||||
this.pbLogo.TabStop = false;
|
||||
//
|
||||
// pnlBottom
|
||||
//
|
||||
this.pnlBottom.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.pnlBottom.Controls.Add(this.llCredits);
|
||||
this.pnlBottom.Controls.Add(this.llChangelog);
|
||||
this.pnlBottom.Controls.Add(this.llLicense);
|
||||
this.pnlBottom.Controls.Add(this.lblTitle);
|
||||
this.pnlBottom.Controls.Add(this.lblVersion);
|
||||
this.pnlBottom.Controls.Add(this.lblLicense);
|
||||
this.pnlBottom.Controls.Add(this.lblCopyright);
|
||||
this.pnlBottom.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlBottom.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.pnlBottom.Location = new System.Drawing.Point(0, 120);
|
||||
this.pnlBottom.Name = "pnlBottom";
|
||||
this.pnlBottom.Size = new System.Drawing.Size(584, 161);
|
||||
this.pnlBottom.TabIndex = 1;
|
||||
//
|
||||
// llCredits
|
||||
//
|
||||
this.llCredits.AutoSize = true;
|
||||
this.llCredits.Font = new System.Drawing.Font("Segoe UI", 9.75F);
|
||||
this.llCredits.Location = new System.Drawing.Point(5, 134);
|
||||
this.llCredits.Name = "llCredits";
|
||||
this.llCredits.Size = new System.Drawing.Size(49, 17);
|
||||
this.llCredits.TabIndex = 10;
|
||||
this.llCredits.TabStop = true;
|
||||
this.llCredits.Text = "Credits";
|
||||
this.llCredits.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCredits_LinkClicked);
|
||||
//
|
||||
// llChangelog
|
||||
//
|
||||
this.llChangelog.AutoSize = true;
|
||||
this.llChangelog.Font = new System.Drawing.Font("Segoe UI", 9.75F);
|
||||
this.llChangelog.Location = new System.Drawing.Point(5, 117);
|
||||
this.llChangelog.Name = "llChangelog";
|
||||
this.llChangelog.Size = new System.Drawing.Size(71, 17);
|
||||
this.llChangelog.TabIndex = 9;
|
||||
this.llChangelog.TabStop = true;
|
||||
this.llChangelog.Text = "Changelog";
|
||||
this.llChangelog.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llChangelog_LinkClicked);
|
||||
//
|
||||
// llLicense
|
||||
//
|
||||
this.llLicense.AutoSize = true;
|
||||
this.llLicense.Font = new System.Drawing.Font("Segoe UI", 9.75F);
|
||||
this.llLicense.Location = new System.Drawing.Point(5, 100);
|
||||
this.llLicense.Name = "llLicense";
|
||||
this.llLicense.Size = new System.Drawing.Size(50, 17);
|
||||
this.llLicense.TabIndex = 8;
|
||||
this.llLicense.TabStop = true;
|
||||
this.llLicense.Text = "License";
|
||||
this.llLicense.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llLicense_LinkClicked);
|
||||
//
|
||||
// lblTitle
|
||||
//
|
||||
this.lblTitle.AutoSize = true;
|
||||
this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblTitle.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblTitle.Location = new System.Drawing.Point(6, 3);
|
||||
this.lblTitle.Name = "lblTitle";
|
||||
this.lblTitle.Size = new System.Drawing.Size(106, 27);
|
||||
this.lblTitle.TabIndex = 0;
|
||||
this.lblTitle.Text = "mRemoteNG";
|
||||
this.lblTitle.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// lblVersion
|
||||
//
|
||||
this.lblVersion.AutoSize = true;
|
||||
this.lblVersion.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblVersion.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblVersion.Location = new System.Drawing.Point(6, 30);
|
||||
this.lblVersion.Name = "lblVersion";
|
||||
this.lblVersion.Size = new System.Drawing.Size(49, 22);
|
||||
this.lblVersion.TabIndex = 1;
|
||||
this.lblVersion.Text = "Version";
|
||||
this.lblVersion.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// lblLicense
|
||||
//
|
||||
this.lblLicense.AutoSize = true;
|
||||
this.lblLicense.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblLicense.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblLicense.Location = new System.Drawing.Point(6, 74);
|
||||
this.lblLicense.Name = "lblLicense";
|
||||
this.lblLicense.Size = new System.Drawing.Size(48, 22);
|
||||
this.lblLicense.TabIndex = 5;
|
||||
this.lblLicense.Text = "License";
|
||||
this.lblLicense.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// lblCopyright
|
||||
//
|
||||
this.lblCopyright.AutoSize = true;
|
||||
this.lblCopyright.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCopyright.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblCopyright.Location = new System.Drawing.Point(6, 52);
|
||||
this.lblCopyright.Name = "lblCopyright";
|
||||
this.lblCopyright.Size = new System.Drawing.Size(63, 22);
|
||||
this.lblCopyright.TabIndex = 2;
|
||||
this.lblCopyright.Text = "Copyright";
|
||||
this.lblCopyright.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// FrmAbout
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.ClientSize = new System.Drawing.Size(584, 281);
|
||||
this.Controls.Add(this.pnlBottom);
|
||||
this.Controls.Add(this.pbLogo);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MaximumSize = new System.Drawing.Size(20000, 10000);
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "FrmAbout";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "About";
|
||||
this.TopMost = true;
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit();
|
||||
this.pnlBottom.ResumeLayout(false);
|
||||
this.pnlBottom.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal Controls.Base.NGLabel lblCopyright;
|
||||
internal Controls.Base.NGLabel lblTitle;
|
||||
internal Controls.Base.NGLabel lblVersion;
|
||||
internal Controls.Base.NGLabel lblLicense;
|
||||
internal System.Windows.Forms.Panel pnlBottom;
|
||||
internal System.Windows.Forms.PictureBox pbLogo;
|
||||
private System.Windows.Forms.LinkLabel llCredits;
|
||||
private System.Windows.Forms.LinkLabel llChangelog;
|
||||
private System.Windows.Forms.LinkLabel llLicense;
|
||||
}
|
||||
}
|
||||
62
mRemoteV1/UI/Forms/FrmAbout.cs
Normal file
62
mRemoteV1/UI/Forms/FrmAbout.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.Themes;
|
||||
using System.Windows.Forms;
|
||||
using System.Diagnostics;
|
||||
using mRemoteNG.UI.Forms;
|
||||
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class FrmAbout : Form
|
||||
{
|
||||
public static FrmAbout Instance { get; set; } = new FrmAbout();
|
||||
|
||||
private FrmAbout()
|
||||
{
|
||||
InitializeComponent();
|
||||
ThemeManager.getInstance().ThemeChanged += ApplyTheme;
|
||||
ApplyLanguage();
|
||||
ApplyTheme();
|
||||
}
|
||||
|
||||
private void ApplyLanguage()
|
||||
{
|
||||
lblLicense.Text = Language.strLabelReleasedUnderGPL;
|
||||
base.Text = Language.strAbout;
|
||||
llChangelog.Text = Language.strChangelog;
|
||||
llCredits.Text = Language.strCredits;
|
||||
llLicense.Text = Language.strLicense;
|
||||
lblCopyright.Text = GeneralAppInfo.Copyright;
|
||||
lblVersion.Text = $@"Version {GeneralAppInfo.ApplicationVersion}";
|
||||
AddPortableString();
|
||||
}
|
||||
|
||||
[Conditional("PORTABLE")]
|
||||
private void AddPortableString() => lblTitle.Text += $@" {Language.strLabelPortableEdition}";
|
||||
|
||||
private void ApplyTheme()
|
||||
{
|
||||
if (!ThemeManager.getInstance().ThemingActive) return;
|
||||
if (!ThemeManager.getInstance().ActiveAndExtended) return;
|
||||
pnlBottom.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlBottom.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
}
|
||||
|
||||
private void llLicense_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
Process.Start("https://github.com/mRemoteNG/mRemoteNG/blob/develop/COPYING.TXT");
|
||||
Close();
|
||||
}
|
||||
|
||||
private void llChangelog_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
Process.Start("https://github.com/mRemoteNG/mRemoteNG/blob/develop/CHANGELOG.md");
|
||||
Close();
|
||||
}
|
||||
|
||||
private void llCredits_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
Process.Start("https://github.com/mRemoteNG/mRemoteNG/blob/develop/CREDITS.md");
|
||||
Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
399
mRemoteV1/UI/Forms/OptionsPages/ComponentsPage.Designer.cs
generated
Normal file
399
mRemoteV1/UI/Forms/OptionsPages/ComponentsPage.Designer.cs
generated
Normal file
@@ -0,0 +1,399 @@
|
||||
|
||||
|
||||
namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
{
|
||||
|
||||
public sealed partial class ComponentsPage : OptionsPage
|
||||
{
|
||||
|
||||
//UserControl overrides dispose to clean up the component list.
|
||||
[System.Diagnostics.DebuggerNonUserCode()]
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (disposing && components != null)
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
|
||||
//Required by the Windows Form Designer
|
||||
private System.ComponentModel.Container components = null;
|
||||
|
||||
//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 void InitializeComponent()
|
||||
{
|
||||
this.pnlCheck1 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck1 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck1 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck1 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck2 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck2 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck2 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck2 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck3 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck3 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck3 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck3 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck4 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck4 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck4 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck4 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck5 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck5 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck5 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck5 = new System.Windows.Forms.PictureBox();
|
||||
this.btnCheckAgain = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.tblCheck = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.pnlCheck1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck1)).BeginInit();
|
||||
this.pnlCheck2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck2)).BeginInit();
|
||||
this.pnlCheck3.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck3)).BeginInit();
|
||||
this.pnlCheck4.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck4)).BeginInit();
|
||||
this.pnlCheck5.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck5)).BeginInit();
|
||||
this.tblCheck.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pnlCheck1
|
||||
//
|
||||
this.pnlCheck1.Controls.Add(this.txtCheck1);
|
||||
this.pnlCheck1.Controls.Add(this.lblCheck1);
|
||||
this.pnlCheck1.Controls.Add(this.pbCheck1);
|
||||
this.pnlCheck1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlCheck1.Location = new System.Drawing.Point(3, 3);
|
||||
this.pnlCheck1.Name = "pnlCheck1";
|
||||
this.pnlCheck1.Size = new System.Drawing.Size(604, 84);
|
||||
this.pnlCheck1.TabIndex = 10;
|
||||
this.pnlCheck1.Visible = false;
|
||||
//
|
||||
// txtCheck1
|
||||
//
|
||||
this.txtCheck1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck1.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txtCheck1.Location = new System.Drawing.Point(35, 25);
|
||||
this.txtCheck1.Multiline = true;
|
||||
this.txtCheck1.Name = "txtCheck1";
|
||||
this.txtCheck1.ReadOnly = true;
|
||||
this.txtCheck1.Size = new System.Drawing.Size(566, 55);
|
||||
this.txtCheck1.TabIndex = 2;
|
||||
//
|
||||
// lblCheck1
|
||||
//
|
||||
this.lblCheck1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck1.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblCheck1.Location = new System.Drawing.Point(32, -1);
|
||||
this.lblCheck1.Name = "lblCheck1";
|
||||
this.lblCheck1.Size = new System.Drawing.Size(493, 23);
|
||||
this.lblCheck1.TabIndex = 1;
|
||||
this.lblCheck1.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck1
|
||||
//
|
||||
this.pbCheck1.Location = new System.Drawing.Point(0, 0);
|
||||
this.pbCheck1.Name = "pbCheck1";
|
||||
this.pbCheck1.Size = new System.Drawing.Size(30, 30);
|
||||
this.pbCheck1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCheck1.TabIndex = 0;
|
||||
this.pbCheck1.TabStop = false;
|
||||
//
|
||||
// pnlCheck2
|
||||
//
|
||||
this.pnlCheck2.Controls.Add(this.txtCheck2);
|
||||
this.pnlCheck2.Controls.Add(this.lblCheck2);
|
||||
this.pnlCheck2.Controls.Add(this.pbCheck2);
|
||||
this.pnlCheck2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlCheck2.Location = new System.Drawing.Point(3, 93);
|
||||
this.pnlCheck2.Name = "pnlCheck2";
|
||||
this.pnlCheck2.Size = new System.Drawing.Size(604, 84);
|
||||
this.pnlCheck2.TabIndex = 20;
|
||||
this.pnlCheck2.Visible = false;
|
||||
//
|
||||
// txtCheck2
|
||||
//
|
||||
this.txtCheck2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck2.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck2.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck2.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txtCheck2.Location = new System.Drawing.Point(35, 25);
|
||||
this.txtCheck2.Multiline = true;
|
||||
this.txtCheck2.Name = "txtCheck2";
|
||||
this.txtCheck2.ReadOnly = true;
|
||||
this.txtCheck2.Size = new System.Drawing.Size(566, 55);
|
||||
this.txtCheck2.TabIndex = 2;
|
||||
//
|
||||
// lblCheck2
|
||||
//
|
||||
this.lblCheck2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck2.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck2.Location = new System.Drawing.Point(32, -1);
|
||||
this.lblCheck2.Name = "lblCheck2";
|
||||
this.lblCheck2.Size = new System.Drawing.Size(489, 23);
|
||||
this.lblCheck2.TabIndex = 1;
|
||||
this.lblCheck2.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck2
|
||||
//
|
||||
this.pbCheck2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck2.Location = new System.Drawing.Point(0, -1);
|
||||
this.pbCheck2.Name = "pbCheck2";
|
||||
this.pbCheck2.Size = new System.Drawing.Size(30, 31);
|
||||
this.pbCheck2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCheck2.TabIndex = 0;
|
||||
this.pbCheck2.TabStop = false;
|
||||
//
|
||||
// pnlCheck3
|
||||
//
|
||||
this.pnlCheck3.Controls.Add(this.txtCheck3);
|
||||
this.pnlCheck3.Controls.Add(this.lblCheck3);
|
||||
this.pnlCheck3.Controls.Add(this.pbCheck3);
|
||||
this.pnlCheck3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlCheck3.Location = new System.Drawing.Point(3, 183);
|
||||
this.pnlCheck3.Name = "pnlCheck3";
|
||||
this.pnlCheck3.Size = new System.Drawing.Size(604, 84);
|
||||
this.pnlCheck3.TabIndex = 30;
|
||||
this.pnlCheck3.Visible = false;
|
||||
//
|
||||
// txtCheck3
|
||||
//
|
||||
this.txtCheck3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck3.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck3.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck3.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txtCheck3.Location = new System.Drawing.Point(35, 25);
|
||||
this.txtCheck3.Multiline = true;
|
||||
this.txtCheck3.Name = "txtCheck3";
|
||||
this.txtCheck3.ReadOnly = true;
|
||||
this.txtCheck3.Size = new System.Drawing.Size(566, 55);
|
||||
this.txtCheck3.TabIndex = 2;
|
||||
//
|
||||
// lblCheck3
|
||||
//
|
||||
this.lblCheck3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck3.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck3.Location = new System.Drawing.Point(32, -1);
|
||||
this.lblCheck3.Name = "lblCheck3";
|
||||
this.lblCheck3.Size = new System.Drawing.Size(489, 23);
|
||||
this.lblCheck3.TabIndex = 1;
|
||||
this.lblCheck3.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck3
|
||||
//
|
||||
this.pbCheck3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck3.Location = new System.Drawing.Point(0, -1);
|
||||
this.pbCheck3.Name = "pbCheck3";
|
||||
this.pbCheck3.Size = new System.Drawing.Size(30, 31);
|
||||
this.pbCheck3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCheck3.TabIndex = 0;
|
||||
this.pbCheck3.TabStop = false;
|
||||
//
|
||||
// pnlCheck4
|
||||
//
|
||||
this.pnlCheck4.Controls.Add(this.txtCheck4);
|
||||
this.pnlCheck4.Controls.Add(this.lblCheck4);
|
||||
this.pnlCheck4.Controls.Add(this.pbCheck4);
|
||||
this.pnlCheck4.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlCheck4.Location = new System.Drawing.Point(3, 273);
|
||||
this.pnlCheck4.Name = "pnlCheck4";
|
||||
this.pnlCheck4.Size = new System.Drawing.Size(604, 84);
|
||||
this.pnlCheck4.TabIndex = 40;
|
||||
this.pnlCheck4.Visible = false;
|
||||
//
|
||||
// txtCheck4
|
||||
//
|
||||
this.txtCheck4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck4.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck4.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck4.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txtCheck4.Location = new System.Drawing.Point(35, 25);
|
||||
this.txtCheck4.Multiline = true;
|
||||
this.txtCheck4.Name = "txtCheck4";
|
||||
this.txtCheck4.ReadOnly = true;
|
||||
this.txtCheck4.Size = new System.Drawing.Size(566, 55);
|
||||
this.txtCheck4.TabIndex = 2;
|
||||
//
|
||||
// lblCheck4
|
||||
//
|
||||
this.lblCheck4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck4.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck4.Location = new System.Drawing.Point(32, -1);
|
||||
this.lblCheck4.Name = "lblCheck4";
|
||||
this.lblCheck4.Size = new System.Drawing.Size(489, 23);
|
||||
this.lblCheck4.TabIndex = 1;
|
||||
this.lblCheck4.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck4
|
||||
//
|
||||
this.pbCheck4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck4.Location = new System.Drawing.Point(0, 0);
|
||||
this.pbCheck4.Name = "pbCheck4";
|
||||
this.pbCheck4.Size = new System.Drawing.Size(30, 31);
|
||||
this.pbCheck4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCheck4.TabIndex = 0;
|
||||
this.pbCheck4.TabStop = false;
|
||||
//
|
||||
// pnlCheck5
|
||||
//
|
||||
this.pnlCheck5.Controls.Add(this.txtCheck5);
|
||||
this.pnlCheck5.Controls.Add(this.lblCheck5);
|
||||
this.pnlCheck5.Controls.Add(this.pbCheck5);
|
||||
this.pnlCheck5.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlCheck5.Location = new System.Drawing.Point(3, 363);
|
||||
this.pnlCheck5.Name = "pnlCheck5";
|
||||
this.pnlCheck5.Size = new System.Drawing.Size(604, 84);
|
||||
this.pnlCheck5.TabIndex = 50;
|
||||
this.pnlCheck5.Visible = false;
|
||||
//
|
||||
// txtCheck5
|
||||
//
|
||||
this.txtCheck5.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck5.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck5.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck5.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txtCheck5.Location = new System.Drawing.Point(35, 25);
|
||||
this.txtCheck5.Multiline = true;
|
||||
this.txtCheck5.Name = "txtCheck5";
|
||||
this.txtCheck5.ReadOnly = true;
|
||||
this.txtCheck5.Size = new System.Drawing.Size(566, 55);
|
||||
this.txtCheck5.TabIndex = 2;
|
||||
//
|
||||
// lblCheck5
|
||||
//
|
||||
this.lblCheck5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck5.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck5.Location = new System.Drawing.Point(32, -1);
|
||||
this.lblCheck5.Name = "lblCheck5";
|
||||
this.lblCheck5.Size = new System.Drawing.Size(489, 23);
|
||||
this.lblCheck5.TabIndex = 1;
|
||||
this.lblCheck5.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck5
|
||||
//
|
||||
this.pbCheck5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck5.Location = new System.Drawing.Point(0, -1);
|
||||
this.pbCheck5.Name = "pbCheck5";
|
||||
this.pbCheck5.Size = new System.Drawing.Size(30, 31);
|
||||
this.pbCheck5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCheck5.TabIndex = 0;
|
||||
this.pbCheck5.TabStop = false;
|
||||
//
|
||||
// btnCheckAgain
|
||||
//
|
||||
this.btnCheckAgain._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.OUT;
|
||||
this.btnCheckAgain.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnCheckAgain.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.btnCheckAgain.Location = new System.Drawing.Point(503, 453);
|
||||
this.btnCheckAgain.Name = "btnCheckAgain";
|
||||
this.btnCheckAgain.Size = new System.Drawing.Size(104, 23);
|
||||
this.btnCheckAgain.TabIndex = 0;
|
||||
this.btnCheckAgain.Text = "Check again";
|
||||
this.btnCheckAgain.UseVisualStyleBackColor = true;
|
||||
this.btnCheckAgain.Click += new System.EventHandler(this.BtnCheckAgain_Click);
|
||||
//
|
||||
// tblCheck
|
||||
//
|
||||
this.tblCheck.ColumnCount = 1;
|
||||
this.tblCheck.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tblCheck.Controls.Add(this.pnlCheck5, 0, 4);
|
||||
this.tblCheck.Controls.Add(this.pnlCheck2, 0, 1);
|
||||
this.tblCheck.Controls.Add(this.pnlCheck3, 0, 2);
|
||||
this.tblCheck.Controls.Add(this.pnlCheck4, 0, 3);
|
||||
this.tblCheck.Controls.Add(this.pnlCheck1, 0, 0);
|
||||
this.tblCheck.Controls.Add(this.btnCheckAgain, 0, 5);
|
||||
this.tblCheck.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tblCheck.Location = new System.Drawing.Point(0, 0);
|
||||
this.tblCheck.Name = "tblCheck";
|
||||
this.tblCheck.RowCount = 6;
|
||||
this.tblCheck.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
|
||||
this.tblCheck.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
|
||||
this.tblCheck.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
|
||||
this.tblCheck.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
|
||||
this.tblCheck.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
|
||||
this.tblCheck.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tblCheck.Size = new System.Drawing.Size(610, 490);
|
||||
this.tblCheck.TabIndex = 51;
|
||||
//
|
||||
// ComponentsPage
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.tblCheck);
|
||||
this.Name = "ComponentsPage";
|
||||
this.Size = new System.Drawing.Size(610, 490);
|
||||
this.pnlCheck1.ResumeLayout(false);
|
||||
this.pnlCheck1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck1)).EndInit();
|
||||
this.pnlCheck2.ResumeLayout(false);
|
||||
this.pnlCheck2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck2)).EndInit();
|
||||
this.pnlCheck3.ResumeLayout(false);
|
||||
this.pnlCheck3.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck3)).EndInit();
|
||||
this.pnlCheck4.ResumeLayout(false);
|
||||
this.pnlCheck4.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck4)).EndInit();
|
||||
this.pnlCheck5.ResumeLayout(false);
|
||||
this.pnlCheck5.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck5)).EndInit();
|
||||
this.tblCheck.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
private System.Windows.Forms.PictureBox pbCheck1;
|
||||
private Controls.Base.NGLabel lblCheck1;
|
||||
private System.Windows.Forms.Panel pnlCheck2;
|
||||
private Controls.Base.NGLabel lblCheck2;
|
||||
private System.Windows.Forms.PictureBox pbCheck2;
|
||||
private System.Windows.Forms.Panel pnlCheck3;
|
||||
private Controls.Base.NGLabel lblCheck3;
|
||||
private System.Windows.Forms.PictureBox pbCheck3;
|
||||
private System.Windows.Forms.Panel pnlCheck4;
|
||||
private Controls.Base.NGLabel lblCheck4;
|
||||
private System.Windows.Forms.PictureBox pbCheck4;
|
||||
private System.Windows.Forms.Panel pnlCheck5;
|
||||
private Controls.Base.NGLabel lblCheck5;
|
||||
private System.Windows.Forms.PictureBox pbCheck5;
|
||||
private Controls.Base.NGButton btnCheckAgain;
|
||||
private Controls.Base.NGTextBox txtCheck1;
|
||||
private Controls.Base.NGTextBox txtCheck2;
|
||||
private Controls.Base.NGTextBox txtCheck3;
|
||||
private Controls.Base.NGTextBox txtCheck4;
|
||||
private Controls.Base.NGTextBox txtCheck5;
|
||||
private System.Windows.Forms.Panel pnlCheck1;
|
||||
private System.Windows.Forms.TableLayoutPanel tblCheck;
|
||||
}
|
||||
}
|
||||
237
mRemoteV1/UI/Forms/OptionsPages/ComponentsPage.cs
Normal file
237
mRemoteV1/UI/Forms/OptionsPages/ComponentsPage.cs
Normal file
@@ -0,0 +1,237 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using AxWFICALib;
|
||||
using Gecko;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.Connection.Protocol.RDP;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Themes;
|
||||
|
||||
namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
{
|
||||
public partial class ComponentsPage
|
||||
{
|
||||
public ComponentsPage()
|
||||
{
|
||||
ApplyTheme();
|
||||
PageIcon = Resources.ComponentsCheck_Icon;
|
||||
InitializeComponent();
|
||||
CheckComponents();
|
||||
FontOverrider.FontOverride(this);
|
||||
ThemeManager.getInstance().ThemeChanged += ApplyTheme;
|
||||
}
|
||||
|
||||
public override string PageName
|
||||
{
|
||||
get => Language.strComponentsCheck;
|
||||
set { }
|
||||
}
|
||||
|
||||
#region Form Stuff
|
||||
|
||||
public override void ApplyLanguage()
|
||||
{
|
||||
base.ApplyLanguage();
|
||||
|
||||
Text = Language.strComponentsCheck;
|
||||
btnCheckAgain.Text = Language.strCcCheckAgain;
|
||||
}
|
||||
|
||||
private void BtnCheckAgain_Click(object sender, EventArgs e)
|
||||
{
|
||||
CheckComponents();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void CheckComponents()
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Beginning component check", true);
|
||||
CheckRdp();
|
||||
CheckVnc();
|
||||
CheckPutty();
|
||||
CheckIca();
|
||||
CheckGeckoBrowser();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Finished component check", true);
|
||||
}
|
||||
|
||||
private void CheckRdp()
|
||||
{
|
||||
pnlCheck1.Visible = true;
|
||||
var rdpProtocolFactory = new RdpProtocolFactory();
|
||||
var supportedVersions = rdpProtocolFactory.GetSupportedVersions();
|
||||
|
||||
if (supportedVersions.Any())
|
||||
{
|
||||
pbCheck1.Image = Resources.Good_Symbol;
|
||||
lblCheck1.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck1.Text = "RDP (Remote Desktop) " + Language.strCcCheckSucceeded;
|
||||
txtCheck1.Text = string.Format(Language.strCcRDPOK, string.Join(", ", supportedVersions));
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "RDP versions installed: "+ string.Join(",", supportedVersions), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
pbCheck1.Image = Resources.Bad_Symbol;
|
||||
lblCheck1.ForeColor = Color.Firebrick;
|
||||
lblCheck1.Text = "RDP (Remote Desktop) " + Language.strCcCheckFailed;
|
||||
txtCheck1.Text = string.Format(Language.strCcRDPFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"RDP " + Language.strCcNotInstalledProperly, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckVnc()
|
||||
{
|
||||
pnlCheck2.Visible = true;
|
||||
|
||||
try
|
||||
{
|
||||
using (var vnc = new VncSharp.RemoteDesktop())
|
||||
{
|
||||
vnc.CreateControl();
|
||||
|
||||
while (!vnc.Created)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
System.Windows.Forms.Application.DoEvents();
|
||||
}
|
||||
|
||||
pbCheck2.Image = Resources.Good_Symbol;
|
||||
lblCheck2.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck2.Text = "VNC (Virtual Network Computing) " + Language.strCcCheckSucceeded;
|
||||
txtCheck2.Text = string.Format(Language.strCcVNCOK, vnc.ProductVersion);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "VNC installed", true);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
pbCheck2.Image = Resources.Bad_Symbol;
|
||||
lblCheck2.ForeColor = Color.Firebrick;
|
||||
lblCheck2.Text = "VNC (Virtual Network Computing) " + Language.strCcCheckFailed;
|
||||
txtCheck2.Text = string.Format(Language.strCcVNCFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"VNC " + Language.strCcNotInstalledProperly, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckPutty()
|
||||
{
|
||||
pnlCheck3.Visible = true;
|
||||
string pPath;
|
||||
if (Settings.Default.UseCustomPuttyPath == false)
|
||||
{
|
||||
pPath = GeneralAppInfo.HomePath + "\\PuTTYNG.exe";
|
||||
}
|
||||
else
|
||||
{
|
||||
pPath = Settings.Default.CustomPuttyPath;
|
||||
}
|
||||
|
||||
if (File.Exists(pPath))
|
||||
{
|
||||
var versionInfo = FileVersionInfo.GetVersionInfo(pPath);
|
||||
|
||||
pbCheck3.Image = Resources.Good_Symbol;
|
||||
lblCheck3.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck3.Text = "PuTTY (SSH/Telnet/Rlogin/RAW) " + Language.strCcCheckSucceeded;
|
||||
txtCheck3.Text =
|
||||
$"{Language.strCcPuttyOK}{Environment.NewLine}Version: {versionInfo.ProductName} Release: {versionInfo.FileVersion}";
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "PuTTY installed", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
pbCheck3.Image = Resources.Bad_Symbol;
|
||||
lblCheck3.ForeColor = Color.Firebrick;
|
||||
lblCheck3.Text = "PuTTY (SSH/Telnet/Rlogin/RAW) " + Language.strCcCheckFailed;
|
||||
txtCheck3.Text = Language.strCcPuttyFailed;
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"PuTTY " + Language.strCcNotInstalledProperly, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "File " + pPath + " does not exist.",
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckIca()
|
||||
{
|
||||
pnlCheck4.Visible = true;
|
||||
|
||||
try
|
||||
{
|
||||
using (var ica = new AxICAClient())
|
||||
{
|
||||
ica.Parent = this;
|
||||
|
||||
pbCheck4.Image = Resources.Good_Symbol;
|
||||
lblCheck4.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck4.Text = @"ICA (Citrix ICA) " + Language.strCcCheckSucceeded;
|
||||
txtCheck4.Text = string.Format(Language.strCcICAOK, ica.Version);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "ICA installed", true);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
pbCheck4.Image = Resources.Bad_Symbol;
|
||||
lblCheck4.ForeColor = Color.Firebrick;
|
||||
lblCheck4.Text = @"ICA (Citrix ICA) " + Language.strCcCheckFailed;
|
||||
txtCheck4.Text = string.Format(Language.strCcICAFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"ICA " + Language.strCcNotInstalledProperly, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, ex.Message, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckGeckoBrowser()
|
||||
{
|
||||
pnlCheck5.Visible = true;
|
||||
var geckoBad = false;
|
||||
var geckoFxPath = Path.Combine(GeneralAppInfo.HomePath, "Firefox");
|
||||
|
||||
if (File.Exists(Path.Combine(GeneralAppInfo.HomePath, "Geckofx-Core.dll")))
|
||||
{
|
||||
if (Directory.Exists(geckoFxPath))
|
||||
{
|
||||
if (!File.Exists(Path.Combine(geckoFxPath, "xul.dll")))
|
||||
{
|
||||
geckoBad = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
geckoBad = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (geckoBad == false)
|
||||
{
|
||||
pbCheck5.Image = Resources.Good_Symbol;
|
||||
lblCheck5.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck5.Text = @"Gecko (Firefox) Rendering Engine (HTTP/S) " + Language.strCcCheckSucceeded;
|
||||
if (!Xpcom.IsInitialized)
|
||||
Xpcom.Initialize("Firefox");
|
||||
txtCheck5.Text = Language.strCcGeckoOK + " Version: " + Xpcom.XulRunnerVersion;
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Gecko Browser installed", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
pbCheck5.Image = Resources.Bad_Symbol;
|
||||
lblCheck5.ForeColor = Color.Firebrick;
|
||||
lblCheck5.Text = @"Gecko (Firefox) Rendering Engine (HTTP/S) " + Language.strCcCheckFailed;
|
||||
txtCheck5.Text = string.Format(Language.strCcGeckoFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"Gecko " + Language.strCcNotInstalledProperly, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
"GeckoFx was not found in " + geckoFxPath, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
Settings.Default.OpenConsFromLastSession = chkReconnectOnStart.Checked;
|
||||
Settings.Default.SingleInstance = chkSingleInstance.Checked;
|
||||
Settings.Default.StartMinimized = chkStartMinimized.Checked;
|
||||
Settings.Default.StartupComponentsCheck = chkProperInstallationOfComponentsAtStartup.Checked;
|
||||
}
|
||||
|
||||
private void StartupExitPage_Load(object sender, EventArgs e)
|
||||
@@ -45,7 +44,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
chkReconnectOnStart.Checked = Settings.Default.OpenConsFromLastSession;
|
||||
chkSingleInstance.Checked = Settings.Default.SingleInstance;
|
||||
chkStartMinimized.Checked = Settings.Default.StartMinimized;
|
||||
chkProperInstallationOfComponentsAtStartup.Checked = Settings.Default.StartupComponentsCheck;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -232,8 +232,6 @@ namespace mRemoteNG.UI.Forms
|
||||
Windows.TreeForm.Focus();
|
||||
|
||||
PuttySessionsManager.Instance.StartWatcher();
|
||||
if (Settings.Default.StartupComponentsCheck)
|
||||
Windows.Show(WindowType.ComponentsCheck);
|
||||
|
||||
Startup.Instance.CreateConnectionsProvider(messageCollector);
|
||||
|
||||
|
||||
2
mRemoteV1/UI/Forms/frmOptions.Designer.cs
generated
2
mRemoteV1/UI/Forms/frmOptions.Designer.cs
generated
@@ -169,7 +169,7 @@
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "mRemoteNG Options";
|
||||
this.Load += new System.EventHandler(this.frmOptions_Load);
|
||||
this.Load += new System.EventHandler(this.FrmOptions_Load);
|
||||
this.pnlBottom.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.lstOptionPages)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
@@ -5,7 +5,6 @@ using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.Themes;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
namespace mRemoteNG.UI.Forms
|
||||
{
|
||||
@@ -28,7 +27,7 @@ namespace mRemoteNG.UI.Forms
|
||||
Cursor.Current = Cursors.Default;
|
||||
}
|
||||
|
||||
private void frmOptions_Load(object sender, EventArgs e)
|
||||
private void FrmOptions_Load(object sender, EventArgs e)
|
||||
{
|
||||
CompileListOfOptionsPages();
|
||||
FontOverrider.FontOverride(this);
|
||||
@@ -78,7 +77,8 @@ namespace mRemoteNG.UI.Forms
|
||||
{typeof(UpdatesPage).Name, new UpdatesPage {Dock = DockStyle.Fill}},
|
||||
{typeof(ThemePage).Name, new ThemePage {Dock = DockStyle.Fill}},
|
||||
{typeof(SecurityPage).Name, new SecurityPage {Dock = DockStyle.Fill}},
|
||||
{typeof(AdvancedPage).Name, new AdvancedPage {Dock = DockStyle.Fill}}
|
||||
{typeof(AdvancedPage).Name, new AdvancedPage {Dock = DockStyle.Fill}},
|
||||
{typeof(ComponentsPage).Name, new ComponentsPage {Dock = DockStyle.Fill}},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.UI.Window;
|
||||
|
||||
namespace mRemoteNG.UI.Menu
|
||||
{
|
||||
@@ -157,7 +158,7 @@ namespace mRemoteNG.UI.Menu
|
||||
|
||||
private void mMenInfoDonate_Click(object sender, EventArgs e) => Process.Start(GeneralAppInfo.UrlDonate);
|
||||
|
||||
private void mMenInfoAbout_Click(object sender, EventArgs e) => Windows.Show(WindowType.About);
|
||||
private void mMenInfoAbout_Click(object sender, EventArgs e) => FrmAbout.Instance.Show();
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ namespace mRemoteNG.UI.Menu
|
||||
private ToolStripMenuItem _mMenToolsExternalApps;
|
||||
private ToolStripMenuItem _mMenToolsPortScan;
|
||||
private ToolStripMenuItem _mMenToolsUvncsc;
|
||||
private ToolStripMenuItem _mMenToolsComponentsCheck;
|
||||
private ToolStripMenuItem _mMenViewScreenshotManager;
|
||||
|
||||
public Form MainForm { get; set; }
|
||||
@@ -31,7 +30,6 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenToolsExternalApps = new ToolStripMenuItem();
|
||||
_mMenToolsPortScan = new ToolStripMenuItem();
|
||||
_mMenToolsSep1 = new ToolStripSeparator();
|
||||
_mMenToolsComponentsCheck = new ToolStripMenuItem();
|
||||
_mMenToolsOptions = new ToolStripMenuItem();
|
||||
_mMenViewScreenshotManager = new ToolStripMenuItem();
|
||||
//
|
||||
@@ -45,7 +43,6 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenToolsPortScan,
|
||||
_mMenViewScreenshotManager,
|
||||
_mMenToolsSep1,
|
||||
_mMenToolsComponentsCheck,
|
||||
_mMenToolsOptions
|
||||
});
|
||||
Name = "mMenTools";
|
||||
@@ -98,14 +95,6 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenToolsSep1.Name = "mMenToolsSep1";
|
||||
_mMenToolsSep1.Size = new System.Drawing.Size(181, 6);
|
||||
//
|
||||
// mMenToolsComponentsCheck
|
||||
//
|
||||
_mMenToolsComponentsCheck.Image = Resources.cog_error;
|
||||
_mMenToolsComponentsCheck.Name = "mMenToolsComponentsCheck";
|
||||
_mMenToolsComponentsCheck.Size = new System.Drawing.Size(184, 22);
|
||||
_mMenToolsComponentsCheck.Text = Language.strComponentsCheck;
|
||||
_mMenToolsComponentsCheck.Click += mMenToolsComponentsCheck_Click;
|
||||
//
|
||||
// mMenToolsOptions
|
||||
//
|
||||
_mMenToolsOptions.Image = Resources.Options;
|
||||
@@ -122,7 +111,6 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenToolsExternalApps.Text = Language.strMenuExternalTools;
|
||||
_mMenToolsPortScan.Text = Language.strMenuPortScan;
|
||||
_mMenViewScreenshotManager.Text = Language.strScreenshots;
|
||||
_mMenToolsComponentsCheck.Text = Language.strComponentsCheck;
|
||||
_mMenToolsOptions.Text = Language.strMenuOptions;
|
||||
}
|
||||
|
||||
@@ -153,11 +141,6 @@ namespace mRemoteNG.UI.Menu
|
||||
Windows.Show(WindowType.ScreenshotManager);
|
||||
}
|
||||
|
||||
private void mMenToolsComponentsCheck_Click(object sender, EventArgs e)
|
||||
{
|
||||
Windows.Show(WindowType.ComponentsCheck);
|
||||
}
|
||||
|
||||
private void mMenToolsOptions_Click(object sender, EventArgs e)
|
||||
{
|
||||
Windows.Show(WindowType.Options);
|
||||
|
||||
203
mRemoteV1/UI/Window/AboutWindow.Designer.cs
generated
203
mRemoteV1/UI/Window/AboutWindow.Designer.cs
generated
@@ -1,203 +0,0 @@
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class AboutWindow
|
||||
{
|
||||
#region Windows Form Designer generated code
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutWindow));
|
||||
this.pnlTop = new System.Windows.Forms.Panel();
|
||||
this.pbLogo = new System.Windows.Forms.PictureBox();
|
||||
this.pnlBottom = new System.Windows.Forms.Panel();
|
||||
this.lblTitle = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblVersion = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblLicense = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblCopyright = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.tlpBottom = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.gwbCredits = new Gecko.GeckoWebBrowser();
|
||||
this.gwbChangeLog = new Gecko.GeckoWebBrowser();
|
||||
this.tlpTop = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.pnlTop.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit();
|
||||
this.pnlBottom.SuspendLayout();
|
||||
this.tlpBottom.SuspendLayout();
|
||||
this.tlpTop.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pnlTop
|
||||
//
|
||||
this.pnlTop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(52)))), ((int)(((byte)(58)))), ((int)(((byte)(64)))));
|
||||
this.pnlTop.Controls.Add(this.pbLogo);
|
||||
this.pnlTop.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlTop.ForeColor = System.Drawing.Color.White;
|
||||
this.pnlTop.Location = new System.Drawing.Point(3, 3);
|
||||
this.pnlTop.Name = "pnlTop";
|
||||
this.pnlTop.Size = new System.Drawing.Size(1111, 116);
|
||||
this.pnlTop.TabIndex = 0;
|
||||
//
|
||||
// pbLogo
|
||||
//
|
||||
this.pbLogo.Image = global::mRemoteNG.Resources.Header_dark;
|
||||
this.pbLogo.Location = new System.Drawing.Point(0, 0);
|
||||
this.pbLogo.Name = "pbLogo";
|
||||
this.pbLogo.Size = new System.Drawing.Size(450, 120);
|
||||
this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.pbLogo.TabIndex = 1;
|
||||
this.pbLogo.TabStop = false;
|
||||
//
|
||||
// pnlBottom
|
||||
//
|
||||
this.pnlBottom.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.pnlBottom.Controls.Add(this.lblTitle);
|
||||
this.pnlBottom.Controls.Add(this.lblVersion);
|
||||
this.pnlBottom.Controls.Add(this.lblLicense);
|
||||
this.pnlBottom.Controls.Add(this.lblCopyright);
|
||||
this.pnlBottom.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlBottom.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.pnlBottom.Location = new System.Drawing.Point(3, 125);
|
||||
this.pnlBottom.Name = "pnlBottom";
|
||||
this.pnlBottom.Size = new System.Drawing.Size(1111, 194);
|
||||
this.pnlBottom.TabIndex = 1;
|
||||
//
|
||||
// lblTitle
|
||||
//
|
||||
this.lblTitle.AutoSize = true;
|
||||
this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblTitle.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblTitle.Location = new System.Drawing.Point(3, 3);
|
||||
this.lblTitle.Name = "lblTitle";
|
||||
this.lblTitle.Size = new System.Drawing.Size(126, 31);
|
||||
this.lblTitle.TabIndex = 0;
|
||||
this.lblTitle.Text = "mRemoteNG";
|
||||
this.lblTitle.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// lblVersion
|
||||
//
|
||||
this.lblVersion.AutoSize = true;
|
||||
this.lblVersion.Font = new System.Drawing.Font("Segoe UI", 11F);
|
||||
this.lblVersion.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblVersion.Location = new System.Drawing.Point(3, 34);
|
||||
this.lblVersion.Name = "lblVersion";
|
||||
this.lblVersion.Size = new System.Drawing.Size(55, 25);
|
||||
this.lblVersion.TabIndex = 1;
|
||||
this.lblVersion.Text = "Version";
|
||||
this.lblVersion.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// lblLicense
|
||||
//
|
||||
this.lblLicense.AutoSize = true;
|
||||
this.lblLicense.Font = new System.Drawing.Font("Segoe UI", 11F);
|
||||
this.lblLicense.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblLicense.Location = new System.Drawing.Point(3, 84);
|
||||
this.lblLicense.Name = "lblLicense";
|
||||
this.lblLicense.Size = new System.Drawing.Size(54, 25);
|
||||
this.lblLicense.TabIndex = 5;
|
||||
this.lblLicense.Text = "License";
|
||||
this.lblLicense.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// lblCopyright
|
||||
//
|
||||
this.lblCopyright.AutoSize = true;
|
||||
this.lblCopyright.Font = new System.Drawing.Font("Segoe UI", 11F);
|
||||
this.lblCopyright.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblCopyright.Location = new System.Drawing.Point(3, 59);
|
||||
this.lblCopyright.Name = "lblCopyright";
|
||||
this.lblCopyright.Size = new System.Drawing.Size(71, 25);
|
||||
this.lblCopyright.TabIndex = 2;
|
||||
this.lblCopyright.Text = "Copyright";
|
||||
this.lblCopyright.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// tlpBottom
|
||||
//
|
||||
this.tlpBottom.ColumnCount = 2;
|
||||
this.tlpBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tlpBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tlpBottom.Controls.Add(this.gwbCredits, 0, 0);
|
||||
this.tlpBottom.Controls.Add(this.gwbChangeLog, 1, 0);
|
||||
this.tlpBottom.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tlpBottom.Location = new System.Drawing.Point(0, 235);
|
||||
this.tlpBottom.Name = "tlpBottom";
|
||||
this.tlpBottom.RowCount = 1;
|
||||
this.tlpBottom.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tlpBottom.Size = new System.Drawing.Size(1117, 470);
|
||||
this.tlpBottom.TabIndex = 13;
|
||||
//
|
||||
// gwbCredits
|
||||
//
|
||||
this.gwbCredits.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.gwbCredits.FrameEventsPropagateToMainWindow = false;
|
||||
this.gwbCredits.Location = new System.Drawing.Point(3, 3);
|
||||
this.gwbCredits.Name = "gwbCredits";
|
||||
this.gwbCredits.NoDefaultContextMenu = true;
|
||||
this.gwbCredits.Size = new System.Drawing.Size(552, 464);
|
||||
this.gwbCredits.TabIndex = 12;
|
||||
this.gwbCredits.UseHttpActivityObserver = false;
|
||||
this.gwbCredits.DomClick += new System.EventHandler<Gecko.DomMouseEventArgs>(this.LinkClicked);
|
||||
//
|
||||
// gwbChangeLog
|
||||
//
|
||||
this.gwbChangeLog.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.gwbChangeLog.FrameEventsPropagateToMainWindow = false;
|
||||
this.gwbChangeLog.Location = new System.Drawing.Point(561, 3);
|
||||
this.gwbChangeLog.Name = "gwbChangeLog";
|
||||
this.gwbChangeLog.NoDefaultContextMenu = true;
|
||||
this.gwbChangeLog.Size = new System.Drawing.Size(553, 464);
|
||||
this.gwbChangeLog.TabIndex = 13;
|
||||
this.gwbChangeLog.UseHttpActivityObserver = false;
|
||||
this.gwbChangeLog.DomClick += new System.EventHandler<Gecko.DomMouseEventArgs>(this.LinkClicked);
|
||||
//
|
||||
// tlpTop
|
||||
//
|
||||
this.tlpTop.ColumnCount = 1;
|
||||
this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tlpTop.Controls.Add(this.pnlTop, 0, 0);
|
||||
this.tlpTop.Controls.Add(this.pnlBottom, 0, 1);
|
||||
this.tlpTop.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.tlpTop.Location = new System.Drawing.Point(0, 0);
|
||||
this.tlpTop.Name = "tlpTop";
|
||||
this.tlpTop.RowCount = 2;
|
||||
this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 122F));
|
||||
this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 200F));
|
||||
this.tlpTop.Size = new System.Drawing.Size(1117, 235);
|
||||
this.tlpTop.TabIndex = 14;
|
||||
//
|
||||
// AboutWindow
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.ClientSize = new System.Drawing.Size(1117, 705);
|
||||
this.Controls.Add(this.tlpBottom);
|
||||
this.Controls.Add(this.tlpTop);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximumSize = new System.Drawing.Size(20000, 10000);
|
||||
this.Name = "AboutWindow";
|
||||
this.TabText = "About";
|
||||
this.Text = "About";
|
||||
this.pnlTop.ResumeLayout(false);
|
||||
this.pnlTop.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit();
|
||||
this.pnlBottom.ResumeLayout(false);
|
||||
this.pnlBottom.PerformLayout();
|
||||
this.tlpBottom.ResumeLayout(false);
|
||||
this.tlpTop.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal Controls.Base.NGLabel lblCopyright;
|
||||
internal Controls.Base.NGLabel lblTitle;
|
||||
internal Controls.Base.NGLabel lblVersion;
|
||||
internal Controls.Base.NGLabel lblLicense;
|
||||
internal System.Windows.Forms.Panel pnlBottom;
|
||||
internal System.Windows.Forms.PictureBox pbLogo;
|
||||
private System.Windows.Forms.TableLayoutPanel tlpBottom;
|
||||
private System.Windows.Forms.TableLayoutPanel tlpTop;
|
||||
internal System.Windows.Forms.Panel pnlTop;
|
||||
private Gecko.GeckoWebBrowser gwbCredits;
|
||||
private Gecko.GeckoWebBrowser gwbChangeLog;
|
||||
}
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Gecko;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Themes;
|
||||
using Markdig;
|
||||
using WeifenLuo.WinFormsUI.Docking;
|
||||
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class AboutWindow : BaseWindow
|
||||
{
|
||||
#region Public Methods
|
||||
|
||||
public AboutWindow()
|
||||
{
|
||||
WindowType = WindowType.About;
|
||||
DockPnl = new DockContent();
|
||||
if (!Xpcom.IsInitialized)
|
||||
Xpcom.Initialize("Firefox");
|
||||
InitializeComponent();
|
||||
FontOverrider.FontOverride(this);
|
||||
ThemeManager.getInstance().ThemeChanged += ApplyTheme;
|
||||
ApplyLanguage();
|
||||
ApplyTheme();
|
||||
LoadDocuments();
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void ApplyLanguage()
|
||||
{
|
||||
lblLicense.Text = Language.strLabelReleasedUnderGPL;
|
||||
TabText = Language.strAbout;
|
||||
Text = Language.strAbout;
|
||||
lblCopyright.Text = GeneralAppInfo.Copyright;
|
||||
lblVersion.Text = $@"Version {GeneralAppInfo.ApplicationVersion}";
|
||||
#if PORTABLE
|
||||
lblTitle.Text += $@" {Language.strLabelPortableEdition}";
|
||||
#endif
|
||||
}
|
||||
|
||||
private new void ApplyTheme()
|
||||
{
|
||||
if (!ThemeManager.getInstance().ThemingActive) return;
|
||||
base.ApplyTheme();
|
||||
if (!ThemeManager.getInstance().ActiveAndExtended) return;
|
||||
BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlBottom.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlBottom.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlTop.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlTop.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
|
||||
#region Form Stuff
|
||||
|
||||
private void LoadDocuments()
|
||||
{
|
||||
try
|
||||
{
|
||||
// AppVeyor seems to pull text files in UNIX format... This messes up the display on the about screen...
|
||||
//
|
||||
// This would be MUCH faster:
|
||||
//var UnxEndRx = new Regex(@"(?<!\r)\n$"); // Look for UNIX line endings and still Windows line endings.
|
||||
//if (UnxEndRx.IsMatch(txtChangeLog.Text))
|
||||
// txtChangeLog.Text = txtChangeLog.Text.Replace("\n", Environment.NewLine);
|
||||
//
|
||||
// But for some reason that I couldn't figure out, the RegEx.IsMatch on CREDITS.md/txtCredits.Text
|
||||
// did not work at all despite it CLEARLY ending with \n when pulled from AppVeyor...
|
||||
// The Changelog is a bit long anyways... Limit the number of lines to something reasonable.
|
||||
|
||||
if (!File.Exists(GeneralAppInfo.HomePath + @"\CREDITS.md") && !File.Exists(GeneralAppInfo.HomePath + @"\CHANGELOG.md")) return;
|
||||
|
||||
var pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();
|
||||
var backgroundColor = ColorTranslator.ToHtml(ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background"));
|
||||
var foregroundColor = ColorTranslator.ToHtml(ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground"));
|
||||
var css =
|
||||
$@"<head><style>body{{font-family:arial,helvetica,sans-serif;font-size:12px;color:{foregroundColor};}}a:link,a:visited,a:hover,a:active{{text-decoration:none;background-color:{foregroundColor};color:{backgroundColor};}}</style></head>";
|
||||
|
||||
var changelog = "";
|
||||
using (var sR = new StreamReader(GeneralAppInfo.HomePath + @"\CHANGELOG.md", Encoding.UTF8, true))
|
||||
{
|
||||
string line;
|
||||
var i = 0;
|
||||
while ((line = sR.ReadLine()) != null)
|
||||
{
|
||||
changelog += line + Environment.NewLine;
|
||||
i++;
|
||||
if (i <= 128 || line != string.Empty) continue;
|
||||
changelog +=
|
||||
$"{Environment.NewLine}***See [CHANGELOG.md](https://github.com/mRemoteNG/mRemoteNG/blob/develop/CHANGELOG.md) for full History...***{Environment.NewLine}";
|
||||
break;
|
||||
}
|
||||
}
|
||||
var changelogHtml = Markdown.ToHtml(changelog, pipeline);
|
||||
changelogHtml = css + $"<body bgcolor=\"{backgroundColor}\">{changelogHtml}</body>";
|
||||
|
||||
var credits = new StreamReader(GeneralAppInfo.HomePath + @"\CREDITS.md", Encoding.UTF8, true).ReadToEnd();
|
||||
var creditsHtml = Markdown.ToHtml(credits, pipeline);
|
||||
creditsHtml = css + $"<body bgcolor=\"{backgroundColor}\">{creditsHtml}</body>";
|
||||
|
||||
gwbChangeLog.LoadHtml(changelogHtml.Replace("©", "©"));
|
||||
gwbCredits.LoadHtml(creditsHtml.Replace("©", "©"));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
"Loading About failed" + Environment.NewLine + ex.Message, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void LinkClicked(object sender, DomMouseEventArgs e)
|
||||
{
|
||||
var url = ((GeckoWebBrowser)sender).StatusText;
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
Process.Start(url);
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
#endregion Form Stuff
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,7 @@
|
||||
|
||||
|
||||
using mRemoteNG.Themes;
|
||||
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class ActiveDirectoryImportWindow : BaseWindow
|
||||
public partial class ActiveDirectoryImportWindow
|
||||
{
|
||||
#region Windows Form Designer generated code
|
||||
private void InitializeComponent()
|
||||
@@ -13,7 +10,7 @@ namespace mRemoteNG.UI.Window
|
||||
this.txtDomain = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblDomain = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.btnChangeDomain = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.ActiveDirectoryTree = new ADTree.ADtree();
|
||||
this.activeDirectoryTree = new mRemoteNG.UI.Controls.AdTree();
|
||||
this.btnClose = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.chkSubOU = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.SuspendLayout();
|
||||
@@ -28,7 +25,7 @@ namespace mRemoteNG.UI.Window
|
||||
this.btnImport.TabIndex = 4;
|
||||
this.btnImport.Text = "&Import";
|
||||
this.btnImport.UseVisualStyleBackColor = true;
|
||||
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
|
||||
this.btnImport.Click += new System.EventHandler(this.BtnImport_Click);
|
||||
//
|
||||
// txtDomain
|
||||
//
|
||||
@@ -39,7 +36,7 @@ namespace mRemoteNG.UI.Window
|
||||
this.txtDomain.Name = "txtDomain";
|
||||
this.txtDomain.Size = new System.Drawing.Size(406, 22);
|
||||
this.txtDomain.TabIndex = 1;
|
||||
this.txtDomain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtDomain_KeyDown);
|
||||
this.txtDomain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtDomain_KeyDown);
|
||||
//
|
||||
// lblDomain
|
||||
//
|
||||
@@ -60,23 +57,22 @@ namespace mRemoteNG.UI.Window
|
||||
this.btnChangeDomain.TabIndex = 2;
|
||||
this.btnChangeDomain.Text = "Change";
|
||||
this.btnChangeDomain.UseVisualStyleBackColor = true;
|
||||
this.btnChangeDomain.Click += new System.EventHandler(this.btnChangeDomain_Click);
|
||||
this.btnChangeDomain.Click += new System.EventHandler(this.BtnChangeDomain_Click);
|
||||
//
|
||||
// ActiveDirectoryTree
|
||||
//
|
||||
this.ActiveDirectoryTree.AdPath = null;
|
||||
this.ActiveDirectoryTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
this.activeDirectoryTree.AdPath = null;
|
||||
this.activeDirectoryTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.ActiveDirectoryTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.ActiveDirectoryTree.Domain = "";
|
||||
this.ActiveDirectoryTree.Location = new System.Drawing.Point(12, 52);
|
||||
this.ActiveDirectoryTree.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ActiveDirectoryTree.Name = "ActiveDirectoryTree";
|
||||
this.ActiveDirectoryTree.SelectedNode = null;
|
||||
this.ActiveDirectoryTree.Size = new System.Drawing.Size(510, 285);
|
||||
this.ActiveDirectoryTree.TabIndex = 3;
|
||||
this.ActiveDirectoryTree.AdPathChanged += new ADTree.ADtree.AdPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged);
|
||||
this.activeDirectoryTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.activeDirectoryTree.Location = new System.Drawing.Point(12, 52);
|
||||
this.activeDirectoryTree.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.activeDirectoryTree.Name = "ActiveDirectoryTree";
|
||||
this.activeDirectoryTree.SelectedNode = null;
|
||||
this.activeDirectoryTree.Size = new System.Drawing.Size(510, 285);
|
||||
this.activeDirectoryTree.TabIndex = 3;
|
||||
this.activeDirectoryTree.AdPathChanged += new mRemoteNG.UI.Controls.AdTree.AdPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged);
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
@@ -88,7 +84,7 @@ namespace mRemoteNG.UI.Window
|
||||
this.btnClose.TabIndex = 5;
|
||||
this.btnClose.Text = "Close";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
this.btnClose.Click += new System.EventHandler(this.BtnClose_Click);
|
||||
//
|
||||
// chkSubOU
|
||||
//
|
||||
@@ -112,7 +108,7 @@ namespace mRemoteNG.UI.Window
|
||||
this.ClientSize = new System.Drawing.Size(534, 381);
|
||||
this.Controls.Add(this.chkSubOU);
|
||||
this.Controls.Add(this.btnClose);
|
||||
this.Controls.Add(this.ActiveDirectoryTree);
|
||||
this.Controls.Add(this.activeDirectoryTree);
|
||||
this.Controls.Add(this.lblDomain);
|
||||
this.Controls.Add(this.txtDomain);
|
||||
this.Controls.Add(this.btnChangeDomain);
|
||||
@@ -122,7 +118,6 @@ namespace mRemoteNG.UI.Window
|
||||
this.Name = "ActiveDirectoryImportWindow";
|
||||
this.TabText = "Active Directory Import";
|
||||
this.Text = "Active Directory Import";
|
||||
this.Load += new System.EventHandler(this.ADImport_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -131,7 +126,7 @@ namespace mRemoteNG.UI.Window
|
||||
private Controls.Base.NGTextBox txtDomain;
|
||||
private Controls.Base.NGLabel lblDomain;
|
||||
private Controls.Base.NGButton btnChangeDomain;
|
||||
private ADTree.ADtree ActiveDirectoryTree;
|
||||
private mRemoteNG.UI.Controls.AdTree activeDirectoryTree;
|
||||
#endregion
|
||||
|
||||
private Controls.Base.NGButton btnClose;
|
||||
|
||||
@@ -8,47 +8,37 @@ using mRemoteNG.Themes;
|
||||
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class ActiveDirectoryImportWindow
|
||||
public partial class ActiveDirectoryImportWindow : BaseWindow
|
||||
{
|
||||
private string _currentDomain;
|
||||
|
||||
public ActiveDirectoryImportWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
FontOverrider.FontOverride(this);
|
||||
WindowType = WindowType.ActiveDirectoryImport;
|
||||
DockPnl = new DockContent();
|
||||
_currentDomain = Environment.UserDomainName;
|
||||
InitializeComponent();
|
||||
FontOverrider.FontOverride(this);
|
||||
ApplyTheme();
|
||||
}
|
||||
|
||||
private new void ApplyTheme()
|
||||
{
|
||||
base.ApplyTheme();
|
||||
if (ActiveDirectoryTree.Controls.Count < 1) return;
|
||||
if (!(ActiveDirectoryTree.Controls[0] is TreeView tv)) return;
|
||||
var tm = ThemeManager.getInstance();
|
||||
if (!tm.ActiveAndExtended) return;
|
||||
tv.BackColor = tm.ActiveTheme.ExtendedPalette.getColor("List_Background");
|
||||
tv.ForeColor = tm.ActiveTheme.ExtendedPalette.getColor("List_Item_Foreground");
|
||||
ApplyLanguage();
|
||||
txtDomain.Text = _currentDomain;
|
||||
EnableDisableImportButton();
|
||||
// Domain doesn't refresh on load, so it defaults to DOMAIN without this...
|
||||
_currentDomain = Environment.UserDomainName;
|
||||
ChangeDomain();
|
||||
}
|
||||
|
||||
#region Private Methods
|
||||
|
||||
#region Event Handlers
|
||||
|
||||
private void ADImport_Load(object sender, EventArgs e)
|
||||
private new void ApplyTheme()
|
||||
{
|
||||
ApplyLanguage();
|
||||
txtDomain.Text = _currentDomain;
|
||||
ActiveDirectoryTree.Domain = _currentDomain;
|
||||
EnableDisableImportButton();
|
||||
|
||||
// Domain doesn't refresh on load, so it defaults to DOMAIN without this...
|
||||
ChangeDomain();
|
||||
if (!ThemeManager.getInstance().ThemingActive) return;
|
||||
base.ApplyTheme();
|
||||
if (!ThemeManager.getInstance().ActiveAndExtended) return;
|
||||
activeDirectoryTree.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("List_Background");
|
||||
activeDirectoryTree.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("List_Item_Foreground");
|
||||
}
|
||||
|
||||
private void btnImport_Click(object sender, EventArgs e)
|
||||
private void BtnImport_Click(object sender, EventArgs e)
|
||||
{
|
||||
var selectedNode = Windows.TreeForm.SelectedNode;
|
||||
ContainerInfo importDestination;
|
||||
@@ -57,37 +47,26 @@ namespace mRemoteNG.UI.Window
|
||||
else
|
||||
importDestination = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes.First();
|
||||
|
||||
Import.ImportFromActiveDirectory(ActiveDirectoryTree.AdPath, importDestination, chkSubOU.Checked);
|
||||
Import.ImportFromActiveDirectory(activeDirectoryTree.AdPath, importDestination, chkSubOU.Checked);
|
||||
}
|
||||
|
||||
/*
|
||||
private static void txtDomain_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
e.IsInputKey = true;
|
||||
}
|
||||
*/
|
||||
|
||||
private void txtDomain_KeyDown(object sender, KeyEventArgs e)
|
||||
private void TxtDomain_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode != Keys.Enter) return;
|
||||
ChangeDomain();
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
|
||||
private void btnChangeDomain_Click(object sender, EventArgs e)
|
||||
private void BtnChangeDomain_Click(object sender, EventArgs e)
|
||||
{
|
||||
ChangeDomain();
|
||||
}
|
||||
|
||||
// ReSharper disable once UnusedParameter.Local
|
||||
private void ActiveDirectoryTree_ADPathChanged(object sender)
|
||||
{
|
||||
EnableDisableImportButton();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void ApplyLanguage()
|
||||
{
|
||||
btnImport.Text = Language.strButtonImport;
|
||||
@@ -100,20 +79,19 @@ namespace mRemoteNG.UI.Window
|
||||
private void ChangeDomain()
|
||||
{
|
||||
_currentDomain = txtDomain.Text;
|
||||
ActiveDirectoryTree.Domain = _currentDomain;
|
||||
ActiveDirectoryTree.Refresh();
|
||||
activeDirectoryTree.Domain = _currentDomain;
|
||||
activeDirectoryTree.Refresh();
|
||||
}
|
||||
|
||||
private void EnableDisableImportButton()
|
||||
{
|
||||
btnImport.Enabled = !string.IsNullOrEmpty(ActiveDirectoryTree.AdPath);
|
||||
btnImport.Enabled = !string.IsNullOrEmpty(activeDirectoryTree.AdPath);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
private void BtnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -1,724 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using AxWFICALib;
|
||||
using Gecko;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.Connection.Protocol.RDP;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Themes;
|
||||
using WeifenLuo.WinFormsUI.Docking;
|
||||
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public class ComponentsCheckWindow : BaseWindow
|
||||
{
|
||||
private readonly Image _successImage;
|
||||
private readonly Image _failureImage;
|
||||
|
||||
#region Form Stuff
|
||||
|
||||
private System.Windows.Forms.PictureBox pbCheck1;
|
||||
private Controls.Base.NGLabel lblCheck1;
|
||||
private System.Windows.Forms.Panel pnlCheck2;
|
||||
private Controls.Base.NGLabel lblCheck2;
|
||||
private System.Windows.Forms.PictureBox pbCheck2;
|
||||
private System.Windows.Forms.Panel pnlCheck3;
|
||||
private Controls.Base.NGLabel lblCheck3;
|
||||
private System.Windows.Forms.PictureBox pbCheck3;
|
||||
private System.Windows.Forms.Panel pnlCheck4;
|
||||
private Controls.Base.NGLabel lblCheck4;
|
||||
private System.Windows.Forms.PictureBox pbCheck4;
|
||||
private System.Windows.Forms.Panel pnlCheck5;
|
||||
private Controls.Base.NGLabel lblCheck5;
|
||||
private System.Windows.Forms.PictureBox pbCheck5;
|
||||
private Controls.Base.NGButton btnCheckAgain;
|
||||
private Controls.Base.NGTextBox txtCheck1;
|
||||
private Controls.Base.NGTextBox txtCheck2;
|
||||
private Controls.Base.NGTextBox txtCheck3;
|
||||
private Controls.Base.NGTextBox txtCheck4;
|
||||
private Controls.Base.NGTextBox txtCheck5;
|
||||
private Controls.Base.NGCheckBox chkAlwaysShow;
|
||||
private System.Windows.Forms.Panel pnlChecks;
|
||||
private System.Windows.Forms.Panel pnlCheck1;
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.pnlCheck1 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck1 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck1 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck1 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck2 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck2 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck2 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck2 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck3 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck3 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck3 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck3 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck4 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck4 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck4 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck4 = new System.Windows.Forms.PictureBox();
|
||||
this.pnlCheck5 = new System.Windows.Forms.Panel();
|
||||
this.txtCheck5 = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblCheck5 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pbCheck5 = new System.Windows.Forms.PictureBox();
|
||||
this.btnCheckAgain = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.chkAlwaysShow = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.pnlChecks = new System.Windows.Forms.Panel();
|
||||
this.pnlCheck1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck1)).BeginInit();
|
||||
this.pnlCheck2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck2)).BeginInit();
|
||||
this.pnlCheck3.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck3)).BeginInit();
|
||||
this.pnlCheck4.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck4)).BeginInit();
|
||||
this.pnlCheck5.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck5)).BeginInit();
|
||||
this.pnlChecks.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pnlCheck1
|
||||
//
|
||||
this.pnlCheck1.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlCheck1.Controls.Add(this.txtCheck1);
|
||||
this.pnlCheck1.Controls.Add(this.lblCheck1);
|
||||
this.pnlCheck1.Controls.Add(this.pbCheck1);
|
||||
this.pnlCheck1.Location = new System.Drawing.Point(3, 3);
|
||||
this.pnlCheck1.Name = "pnlCheck1";
|
||||
this.pnlCheck1.Size = new System.Drawing.Size(562, 130);
|
||||
this.pnlCheck1.TabIndex = 10;
|
||||
this.pnlCheck1.Visible = false;
|
||||
//
|
||||
// txtCheck1
|
||||
//
|
||||
this.txtCheck1.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck1.Location = new System.Drawing.Point(129, 29);
|
||||
this.txtCheck1.Multiline = true;
|
||||
this.txtCheck1.Name = "txtCheck1";
|
||||
this.txtCheck1.ReadOnly = true;
|
||||
this.txtCheck1.Size = new System.Drawing.Size(430, 97);
|
||||
this.txtCheck1.TabIndex = 2;
|
||||
//
|
||||
// lblCheck1
|
||||
//
|
||||
this.lblCheck1.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck1.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold,
|
||||
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck1.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.lblCheck1.Location = new System.Drawing.Point(108, 3);
|
||||
this.lblCheck1.Name = "lblCheck1";
|
||||
this.lblCheck1.Size = new System.Drawing.Size(451, 23);
|
||||
this.lblCheck1.TabIndex = 1;
|
||||
this.lblCheck1.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck1
|
||||
//
|
||||
this.pbCheck1.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck1.Location = new System.Drawing.Point(3, 3);
|
||||
this.pbCheck1.Name = "pbCheck1";
|
||||
this.pbCheck1.Size = new System.Drawing.Size(72, 123);
|
||||
this.pbCheck1.TabIndex = 0;
|
||||
this.pbCheck1.TabStop = false;
|
||||
//
|
||||
// pnlCheck2
|
||||
//
|
||||
this.pnlCheck2.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlCheck2.Controls.Add(this.txtCheck2);
|
||||
this.pnlCheck2.Controls.Add(this.lblCheck2);
|
||||
this.pnlCheck2.Controls.Add(this.pbCheck2);
|
||||
this.pnlCheck2.Location = new System.Drawing.Point(3, 139);
|
||||
this.pnlCheck2.Name = "pnlCheck2";
|
||||
this.pnlCheck2.Size = new System.Drawing.Size(562, 130);
|
||||
this.pnlCheck2.TabIndex = 20;
|
||||
this.pnlCheck2.Visible = false;
|
||||
//
|
||||
// txtCheck2
|
||||
//
|
||||
this.txtCheck2.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck2.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck2.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck2.Location = new System.Drawing.Point(129, 29);
|
||||
this.txtCheck2.Multiline = true;
|
||||
this.txtCheck2.Name = "txtCheck2";
|
||||
this.txtCheck2.ReadOnly = true;
|
||||
this.txtCheck2.Size = new System.Drawing.Size(430, 97);
|
||||
this.txtCheck2.TabIndex = 2;
|
||||
//
|
||||
// lblCheck2
|
||||
//
|
||||
this.lblCheck2.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck2.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold,
|
||||
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck2.Location = new System.Drawing.Point(112, 3);
|
||||
this.lblCheck2.Name = "lblCheck2";
|
||||
this.lblCheck2.Size = new System.Drawing.Size(447, 23);
|
||||
this.lblCheck2.TabIndex = 1;
|
||||
this.lblCheck2.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck2
|
||||
//
|
||||
this.pbCheck2.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck2.Location = new System.Drawing.Point(3, 3);
|
||||
this.pbCheck2.Name = "pbCheck2";
|
||||
this.pbCheck2.Size = new System.Drawing.Size(72, 123);
|
||||
this.pbCheck2.TabIndex = 0;
|
||||
this.pbCheck2.TabStop = false;
|
||||
//
|
||||
// pnlCheck3
|
||||
//
|
||||
this.pnlCheck3.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlCheck3.Controls.Add(this.txtCheck3);
|
||||
this.pnlCheck3.Controls.Add(this.lblCheck3);
|
||||
this.pnlCheck3.Controls.Add(this.pbCheck3);
|
||||
this.pnlCheck3.Location = new System.Drawing.Point(3, 275);
|
||||
this.pnlCheck3.Name = "pnlCheck3";
|
||||
this.pnlCheck3.Size = new System.Drawing.Size(562, 130);
|
||||
this.pnlCheck3.TabIndex = 30;
|
||||
this.pnlCheck3.Visible = false;
|
||||
//
|
||||
// txtCheck3
|
||||
//
|
||||
this.txtCheck3.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck3.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck3.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck3.Location = new System.Drawing.Point(129, 29);
|
||||
this.txtCheck3.Multiline = true;
|
||||
this.txtCheck3.Name = "txtCheck3";
|
||||
this.txtCheck3.ReadOnly = true;
|
||||
this.txtCheck3.Size = new System.Drawing.Size(430, 97);
|
||||
this.txtCheck3.TabIndex = 2;
|
||||
//
|
||||
// lblCheck3
|
||||
//
|
||||
this.lblCheck3.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck3.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold,
|
||||
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck3.Location = new System.Drawing.Point(112, 3);
|
||||
this.lblCheck3.Name = "lblCheck3";
|
||||
this.lblCheck3.Size = new System.Drawing.Size(447, 23);
|
||||
this.lblCheck3.TabIndex = 1;
|
||||
this.lblCheck3.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck3
|
||||
//
|
||||
this.pbCheck3.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck3.Location = new System.Drawing.Point(3, 3);
|
||||
this.pbCheck3.Name = "pbCheck3";
|
||||
this.pbCheck3.Size = new System.Drawing.Size(72, 123);
|
||||
this.pbCheck3.TabIndex = 0;
|
||||
this.pbCheck3.TabStop = false;
|
||||
//
|
||||
// pnlCheck4
|
||||
//
|
||||
this.pnlCheck4.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlCheck4.Controls.Add(this.txtCheck4);
|
||||
this.pnlCheck4.Controls.Add(this.lblCheck4);
|
||||
this.pnlCheck4.Controls.Add(this.pbCheck4);
|
||||
this.pnlCheck4.Location = new System.Drawing.Point(3, 411);
|
||||
this.pnlCheck4.Name = "pnlCheck4";
|
||||
this.pnlCheck4.Size = new System.Drawing.Size(562, 130);
|
||||
this.pnlCheck4.TabIndex = 40;
|
||||
this.pnlCheck4.Visible = false;
|
||||
//
|
||||
// txtCheck4
|
||||
//
|
||||
this.txtCheck4.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck4.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck4.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck4.Location = new System.Drawing.Point(129, 30);
|
||||
this.txtCheck4.Multiline = true;
|
||||
this.txtCheck4.Name = "txtCheck4";
|
||||
this.txtCheck4.ReadOnly = true;
|
||||
this.txtCheck4.Size = new System.Drawing.Size(430, 97);
|
||||
this.txtCheck4.TabIndex = 2;
|
||||
//
|
||||
// lblCheck4
|
||||
//
|
||||
this.lblCheck4.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck4.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold,
|
||||
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck4.Location = new System.Drawing.Point(112, 3);
|
||||
this.lblCheck4.Name = "lblCheck4";
|
||||
this.lblCheck4.Size = new System.Drawing.Size(447, 23);
|
||||
this.lblCheck4.TabIndex = 1;
|
||||
this.lblCheck4.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck4
|
||||
//
|
||||
this.pbCheck4.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck4.Location = new System.Drawing.Point(3, 3);
|
||||
this.pbCheck4.Name = "pbCheck4";
|
||||
this.pbCheck4.Size = new System.Drawing.Size(72, 123);
|
||||
this.pbCheck4.TabIndex = 0;
|
||||
this.pbCheck4.TabStop = false;
|
||||
//
|
||||
// pnlCheck5
|
||||
//
|
||||
this.pnlCheck5.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlCheck5.Controls.Add(this.txtCheck5);
|
||||
this.pnlCheck5.Controls.Add(this.lblCheck5);
|
||||
this.pnlCheck5.Controls.Add(this.pbCheck5);
|
||||
this.pnlCheck5.Location = new System.Drawing.Point(3, 547);
|
||||
this.pnlCheck5.Name = "pnlCheck5";
|
||||
this.pnlCheck5.Size = new System.Drawing.Size(562, 130);
|
||||
this.pnlCheck5.TabIndex = 50;
|
||||
this.pnlCheck5.Visible = false;
|
||||
//
|
||||
// txtCheck5
|
||||
//
|
||||
this.txtCheck5.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCheck5.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.txtCheck5.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCheck5.Location = new System.Drawing.Point(129, 29);
|
||||
this.txtCheck5.Multiline = true;
|
||||
this.txtCheck5.Name = "txtCheck5";
|
||||
this.txtCheck5.ReadOnly = true;
|
||||
this.txtCheck5.Size = new System.Drawing.Size(430, 97);
|
||||
this.txtCheck5.TabIndex = 2;
|
||||
//
|
||||
// lblCheck5
|
||||
//
|
||||
this.lblCheck5.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblCheck5.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold,
|
||||
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblCheck5.Location = new System.Drawing.Point(112, 3);
|
||||
this.lblCheck5.Name = "lblCheck5";
|
||||
this.lblCheck5.Size = new System.Drawing.Size(447, 23);
|
||||
this.lblCheck5.TabIndex = 1;
|
||||
this.lblCheck5.Text = "RDP check succeeded!";
|
||||
//
|
||||
// pbCheck5
|
||||
//
|
||||
this.pbCheck5.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.pbCheck5.Location = new System.Drawing.Point(3, 3);
|
||||
this.pbCheck5.Name = "pbCheck5";
|
||||
this.pbCheck5.Size = new System.Drawing.Size(72, 123);
|
||||
this.pbCheck5.TabIndex = 0;
|
||||
this.pbCheck5.TabStop = false;
|
||||
//
|
||||
// btnCheckAgain
|
||||
//
|
||||
this.btnCheckAgain._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
||||
this.btnCheckAgain.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom |
|
||||
System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnCheckAgain.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.btnCheckAgain.Location = new System.Drawing.Point(476, 810);
|
||||
this.btnCheckAgain.Name = "btnCheckAgain";
|
||||
this.btnCheckAgain.Size = new System.Drawing.Size(104, 23);
|
||||
this.btnCheckAgain.TabIndex = 0;
|
||||
this.btnCheckAgain.Text = "Check again";
|
||||
this.btnCheckAgain.UseVisualStyleBackColor = true;
|
||||
this.btnCheckAgain.Click += new System.EventHandler(this.btnCheckAgain_Click);
|
||||
//
|
||||
// chkAlwaysShow
|
||||
//
|
||||
this.chkAlwaysShow._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
||||
this.chkAlwaysShow.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom |
|
||||
System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.chkAlwaysShow.AutoSize = true;
|
||||
this.chkAlwaysShow.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.chkAlwaysShow.Location = new System.Drawing.Point(12, 814);
|
||||
this.chkAlwaysShow.Name = "chkAlwaysShow";
|
||||
this.chkAlwaysShow.Size = new System.Drawing.Size(200, 17);
|
||||
this.chkAlwaysShow.TabIndex = 51;
|
||||
this.chkAlwaysShow.Text = "Always show this screen at startup";
|
||||
this.chkAlwaysShow.UseVisualStyleBackColor = true;
|
||||
this.chkAlwaysShow.CheckedChanged += new System.EventHandler(this.chkAlwaysShow_CheckedChanged);
|
||||
//
|
||||
// pnlChecks
|
||||
//
|
||||
this.pnlChecks.Anchor =
|
||||
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
|
||||
System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlChecks.AutoScroll = true;
|
||||
this.pnlChecks.Controls.Add(this.pnlCheck1);
|
||||
this.pnlChecks.Controls.Add(this.pnlCheck2);
|
||||
this.pnlChecks.Controls.Add(this.pnlCheck3);
|
||||
this.pnlChecks.Controls.Add(this.pnlCheck5);
|
||||
this.pnlChecks.Controls.Add(this.pnlCheck4);
|
||||
this.pnlChecks.Location = new System.Drawing.Point(12, 12);
|
||||
this.pnlChecks.Name = "pnlChecks";
|
||||
this.pnlChecks.Size = new System.Drawing.Size(568, 792);
|
||||
this.pnlChecks.TabIndex = 52;
|
||||
//
|
||||
// ComponentsCheckWindow
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.ClientSize = new System.Drawing.Size(592, 845);
|
||||
this.Controls.Add(this.pnlChecks);
|
||||
this.Controls.Add(this.chkAlwaysShow);
|
||||
this.Controls.Add(this.btnCheckAgain);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular,
|
||||
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.Icon = global::mRemoteNG.Resources.ComponentsCheck_Icon;
|
||||
this.Name = "ComponentsCheckWindow";
|
||||
this.TabText = "Components Check";
|
||||
this.Text = "Components Check";
|
||||
this.Load += new System.EventHandler(this.ComponentsCheck_Load);
|
||||
this.pnlCheck1.ResumeLayout(false);
|
||||
this.pnlCheck1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck1)).EndInit();
|
||||
this.pnlCheck2.ResumeLayout(false);
|
||||
this.pnlCheck2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck2)).EndInit();
|
||||
this.pnlCheck3.ResumeLayout(false);
|
||||
this.pnlCheck3.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck3)).EndInit();
|
||||
this.pnlCheck4.ResumeLayout(false);
|
||||
this.pnlCheck4.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck4)).EndInit();
|
||||
this.pnlCheck5.ResumeLayout(false);
|
||||
this.pnlCheck5.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCheck5)).EndInit();
|
||||
this.pnlChecks.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public ComponentsCheckWindow()
|
||||
{
|
||||
WindowType = WindowType.ComponentsCheck;
|
||||
DockPnl = new DockContent();
|
||||
InitializeComponent();
|
||||
var display = new DisplayProperties();
|
||||
_successImage = display.ScaleImage(Resources.Good_Symbol);
|
||||
_failureImage = display.ScaleImage(Resources.Bad_Symbol);
|
||||
FontOverrider.FontOverride(this);
|
||||
ThemeManager.getInstance().ThemeChanged += ApplyTheme;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Form Stuff
|
||||
|
||||
private void ComponentsCheck_Load(object sender, EventArgs e)
|
||||
{
|
||||
ApplyLanguage();
|
||||
ApplyTheme();
|
||||
chkAlwaysShow.Checked = Settings.Default.StartupComponentsCheck;
|
||||
CheckComponents();
|
||||
}
|
||||
|
||||
private void ApplyLanguage()
|
||||
{
|
||||
TabText = Language.strComponentsCheck;
|
||||
Text = Language.strComponentsCheck;
|
||||
chkAlwaysShow.Text = Language.strCcAlwaysShowScreen;
|
||||
btnCheckAgain.Text = Language.strCcCheckAgain;
|
||||
}
|
||||
|
||||
private new void ApplyTheme()
|
||||
{
|
||||
if (!ThemeManager.getInstance().ThemingActive) return;
|
||||
base.ApplyTheme();
|
||||
|
||||
if (!ThemeManager.getInstance().ActiveAndExtended) return;
|
||||
pnlCheck1.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlCheck1.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlCheck2.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlCheck2.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlCheck3.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlCheck3.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlCheck4.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlCheck4.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlCheck5.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlCheck5.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
pnlChecks.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Background");
|
||||
pnlChecks.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground");
|
||||
}
|
||||
|
||||
private void btnCheckAgain_Click(object sender, EventArgs e)
|
||||
{
|
||||
CheckComponents();
|
||||
}
|
||||
|
||||
private void chkAlwaysShow_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Settings.Default.StartupComponentsCheck = chkAlwaysShow.Checked;
|
||||
}
|
||||
|
||||
public new void Show(DockPanel panel)
|
||||
{
|
||||
try
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Trying to show the components window",
|
||||
true);
|
||||
base.Show(panel);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddExceptionMessage("Failed to properly show the ComponentsWindow", ex);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void CheckComponents()
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Beginning component check", true);
|
||||
CheckRdp();
|
||||
CheckVnc();
|
||||
CheckPutty();
|
||||
CheckIca();
|
||||
CheckGeckoBrowser();
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Finished component check", true);
|
||||
}
|
||||
|
||||
private void CheckRdp()
|
||||
{
|
||||
pnlCheck1.Visible = true;
|
||||
var rdpProtocolFactory = new RdpProtocolFactory();
|
||||
var supportedVersions = rdpProtocolFactory.GetSupportedVersions();
|
||||
|
||||
if (supportedVersions.Any())
|
||||
{
|
||||
pbCheck1.Image = _successImage;
|
||||
lblCheck1.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck1.Text = "RDP (Remote Desktop) " + Language.strCcCheckSucceeded;
|
||||
txtCheck1.Text = string.Format(Language.strCcRDPOK, string.Join(", ", supportedVersions));
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "RDP versions installed: "+ string.Join(",", supportedVersions), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
pbCheck1.Image = _failureImage;
|
||||
lblCheck1.ForeColor = Color.Firebrick;
|
||||
lblCheck1.Text = "RDP (Remote Desktop) " + Language.strCcCheckFailed;
|
||||
txtCheck1.Text = string.Format(Language.strCcRDPFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"RDP " + Language.strCcNotInstalledProperly, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckVnc()
|
||||
{
|
||||
pnlCheck2.Visible = true;
|
||||
|
||||
try
|
||||
{
|
||||
using (var vnc = new VncSharp.RemoteDesktop())
|
||||
{
|
||||
vnc.CreateControl();
|
||||
|
||||
while (!vnc.Created)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
System.Windows.Forms.Application.DoEvents();
|
||||
}
|
||||
|
||||
pbCheck2.Image = _successImage;
|
||||
lblCheck2.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck2.Text = "VNC (Virtual Network Computing) " + Language.strCcCheckSucceeded;
|
||||
txtCheck2.Text = string.Format(Language.strCcVNCOK, vnc.ProductVersion);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "VNC installed", true);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
pbCheck2.Image = _failureImage;
|
||||
lblCheck2.ForeColor = Color.Firebrick;
|
||||
lblCheck2.Text = "VNC (Virtual Network Computing) " + Language.strCcCheckFailed;
|
||||
txtCheck2.Text = string.Format(Language.strCcVNCFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"VNC " + Language.strCcNotInstalledProperly, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckPutty()
|
||||
{
|
||||
pnlCheck3.Visible = true;
|
||||
string pPath;
|
||||
if (Settings.Default.UseCustomPuttyPath == false)
|
||||
{
|
||||
pPath = GeneralAppInfo.HomePath + "\\PuTTYNG.exe";
|
||||
}
|
||||
else
|
||||
{
|
||||
pPath = Settings.Default.CustomPuttyPath;
|
||||
}
|
||||
|
||||
if (File.Exists(pPath))
|
||||
{
|
||||
var versionInfo = FileVersionInfo.GetVersionInfo(pPath);
|
||||
|
||||
pbCheck3.Image = _successImage;
|
||||
lblCheck3.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck3.Text = "PuTTY (SSH/Telnet/Rlogin/RAW) " + Language.strCcCheckSucceeded;
|
||||
txtCheck3.Text =
|
||||
$"{Language.strCcPuttyOK}{Environment.NewLine}Version: {versionInfo.ProductName} Release: {versionInfo.FileVersion}";
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "PuTTY installed", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
pbCheck3.Image = _failureImage;
|
||||
lblCheck3.ForeColor = Color.Firebrick;
|
||||
lblCheck3.Text = "PuTTY (SSH/Telnet/Rlogin/RAW) " + Language.strCcCheckFailed;
|
||||
txtCheck3.Text = Language.strCcPuttyFailed;
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"PuTTY " + Language.strCcNotInstalledProperly, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "File " + pPath + " does not exist.",
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckIca()
|
||||
{
|
||||
pnlCheck4.Visible = true;
|
||||
|
||||
try
|
||||
{
|
||||
using (var ica = new AxICAClient())
|
||||
{
|
||||
ica.Parent = this;
|
||||
|
||||
pbCheck4.Image = _successImage;
|
||||
lblCheck4.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck4.Text = @"ICA (Citrix ICA) " + Language.strCcCheckSucceeded;
|
||||
txtCheck4.Text = string.Format(Language.strCcICAOK, ica.Version);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "ICA installed", true);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
pbCheck4.Image = _failureImage;
|
||||
lblCheck4.ForeColor = Color.Firebrick;
|
||||
lblCheck4.Text = @"ICA (Citrix ICA) " + Language.strCcCheckFailed;
|
||||
txtCheck4.Text = string.Format(Language.strCcICAFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"ICA " + Language.strCcNotInstalledProperly, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, ex.Message, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckGeckoBrowser()
|
||||
{
|
||||
pnlCheck5.Visible = true;
|
||||
var geckoBad = false;
|
||||
var geckoFxPath = Path.Combine(GeneralAppInfo.HomePath, "Firefox");
|
||||
|
||||
if (File.Exists(Path.Combine(GeneralAppInfo.HomePath, "Geckofx-Core.dll")))
|
||||
{
|
||||
if (Directory.Exists(geckoFxPath))
|
||||
{
|
||||
if (!File.Exists(Path.Combine(geckoFxPath, "xul.dll")))
|
||||
{
|
||||
geckoBad = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
geckoBad = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (geckoBad == false)
|
||||
{
|
||||
pbCheck5.Image = _successImage;
|
||||
lblCheck5.ForeColor = Color.DarkOliveGreen;
|
||||
lblCheck5.Text = @"Gecko (Firefox) Rendering Engine (HTTP/S) " + Language.strCcCheckSucceeded;
|
||||
if (!Xpcom.IsInitialized)
|
||||
Xpcom.Initialize("Firefox");
|
||||
txtCheck5.Text = Language.strCcGeckoOK + " Version: " + Xpcom.XulRunnerVersion;
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Gecko Browser installed", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
pbCheck5.Image = _failureImage;
|
||||
lblCheck5.ForeColor = Color.Firebrick;
|
||||
lblCheck5.Text = @"Gecko (Firefox) Rendering Engine (HTTP/S) " + Language.strCcCheckFailed;
|
||||
txtCheck5.Text = string.Format(Language.strCcGeckoFailed, GeneralAppInfo.UrlForum);
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
"Gecko " + Language.strCcNotInstalledProperly, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
"GeckoFx was not found in " + geckoFxPath, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace mRemoteNG.UI
|
||||
namespace mRemoteNG.UI
|
||||
{
|
||||
public enum WindowType
|
||||
{
|
||||
@@ -8,7 +8,6 @@ namespace mRemoteNG.UI
|
||||
ErrorsAndInfos = 4,
|
||||
ScreenshotManager = 5,
|
||||
Options = 6,
|
||||
About = 8,
|
||||
Update = 9,
|
||||
SSHTransfer = 10,
|
||||
ActiveDirectoryImport = 11,
|
||||
@@ -16,6 +15,5 @@ namespace mRemoteNG.UI
|
||||
ExternalApps = 13,
|
||||
PortScan = 14,
|
||||
UltraVNCSC = 16,
|
||||
ComponentsCheck = 17,
|
||||
}
|
||||
}
|
||||
@@ -753,6 +753,18 @@
|
||||
<setting name="InhDefaultRdpVersion" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="InhDefaultSSHTunnelConnectionName" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="ConDefaultSSHTunnelConnectionName" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="InhDefaultSSHOptions" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="ConDefaultSSHOptions" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="StartMinimized" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
@@ -785,11 +797,19 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.5.0" newVersion="1.8.5.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.6.0" newVersion="1.8.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.9.2.0" newVersion="3.9.2.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.12.1.0" newVersion="3.12.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
|
||||
<Import Project="..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.15.1\build\net35\NUnit3TestAdapter.props')" />
|
||||
<Import Project="..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.16.1\build\net35\NUnit3TestAdapter.props')" />
|
||||
<Import Project="..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.props" Condition="Exists('..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.props')" />
|
||||
<Import Project="..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.props')" />
|
||||
<Import Project="..\packages\cef.redist.x86.79.1.35\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.79.1.35\build\cef.redist.x86.props')" />
|
||||
@@ -53,17 +53,17 @@
|
||||
<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ADTree">
|
||||
<HintPath>References\ADTree.dll</HintPath>
|
||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.6.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
||||
<HintPath>..\packages\BouncyCastle.1.8.6.1\lib\BouncyCastle.Crypto.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.5.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
||||
<HintPath>..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll</HintPath>
|
||||
<Reference Include="ConsoleControl, Version=1.3.0.0, Culture=neutral, PublicKeyToken=7edd23586f5e297f, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ConsoleControl.1.3.0\lib\net40-client\ConsoleControl.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ConsoleControl, Version=1.2.1.0, Culture=neutral, PublicKeyToken=7edd23586f5e297f, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ConsoleControl.1.2.1\lib\net40-client\ConsoleControl.dll</HintPath>
|
||||
<Reference Include="ConsoleControlAPI, Version=1.3.0.0, Culture=neutral, PublicKeyToken=7c86b8a36b9c33e2, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ConsoleControlAPI.1.3.0\lib\net40\ConsoleControlAPI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ConsoleControlAPI, Version=1.2.1.0, Culture=neutral, PublicKeyToken=7c86b8a36b9c33e2, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ConsoleControlAPI.1.2.1\lib\net40\ConsoleControlAPI.dll</HintPath>
|
||||
<Reference Include="Geckofx-Core, Version=60.0.44.0, Culture=neutral, PublicKeyToken=3209ac31600d1857, processorArchitecture=x86">
|
||||
<HintPath>..\packages\Geckofx60.32.60.0.44\lib\net45\Geckofx-Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Protobuf, Version=3.9.2.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Protobuf.3.9.2\lib\net45\Google.Protobuf.dll</HintPath>
|
||||
@@ -71,13 +71,10 @@
|
||||
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Markdig, Version=0.17.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Markdig.0.17.1\lib\net40\Markdig.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="MySql.Data, Version=8.0.17.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MySql.Data.8.0.17\lib\net452\MySql.Data.dll</HintPath>
|
||||
<Reference Include="MySql.Data, Version=8.0.20.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MySql.Data.8.0.20\lib\net452\MySql.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ObjectListView.Official.2.9.1\lib\net20\ObjectListView.dll</HintPath>
|
||||
@@ -86,6 +83,9 @@
|
||||
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel" />
|
||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||
<Reference Include="System.Configuration" />
|
||||
@@ -95,12 +95,25 @@
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Drawing.Design" />
|
||||
<Reference Include="System.Management" />
|
||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security" />
|
||||
<Reference Include="System.Transactions" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="Ubiety.Dns.Core, Version=2.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MySql.Data.8.0.20\lib\net452\Ubiety.Dns.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VncSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=61974755c7bfea7c, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>References\VncSharp.dll</HintPath>
|
||||
@@ -121,6 +134,9 @@
|
||||
<HintPath>..\packages\DockPanelSuite.ThemeVS2015.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="Zstandard.Net, Version=1.1.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MySql.Data.8.0.20\lib\net452\Zstandard.Net.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Credential\Records\" />
|
||||
@@ -299,6 +315,11 @@
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Resources\Language\Language.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Language.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Resources\Themes\ColorMapTheme.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
@@ -314,6 +335,7 @@
|
||||
<Compile Include="Themes\MremoteNGThemeBase.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Tools\ADhelper.cs" />
|
||||
<Compile Include="Tools\Attributes\UsedInAllProtocolsExceptAttribute.cs" />
|
||||
<Compile Include="Tools\Clipboard\WindowsClipboard.cs" />
|
||||
<Compile Include="Tools\CustomCollections\IFullyNotifiableList.cs" />
|
||||
@@ -367,7 +389,7 @@
|
||||
<Compile Include="Security\Factories\CryptoProviderFactoryFromXml.cs" />
|
||||
<Compile Include="Tools\Cmdline\StartupArgumentsInterpreter.cs" />
|
||||
<Compile Include="Tools\CustomCollections\CollectionUpdatedEventArgs.cs" />
|
||||
<Compile Include="Settings.cs" />
|
||||
<Compile Include="Config\Settings\Settings.cs" />
|
||||
<Compile Include="Tools\DisposableAction.cs" />
|
||||
<Compile Include="Tools\DisposableOptional.cs" />
|
||||
<Compile Include="Tools\Extensions.cs" />
|
||||
@@ -375,6 +397,7 @@
|
||||
<Compile Include="Tools\Cmdline\CmdArgumentsInterpreter.cs" />
|
||||
<Compile Include="Tools\ConnectionsTreeToMenuItemsConverter.cs" />
|
||||
<Compile Include="Tools\ExternalToolsService.cs" />
|
||||
<Compile Include="Tools\SshTunnelTypeConverter.cs" />
|
||||
<Compile Include="Tools\ExternalToolsTypeConverter.cs" />
|
||||
<Compile Include="Tools\CustomCollections\INotifyCollectionUpdated.cs" />
|
||||
<Compile Include="Tools\Optional.cs" />
|
||||
@@ -405,6 +428,12 @@
|
||||
<Compile Include="Tree\Root\RootNodeTypeEnum.cs" />
|
||||
<Compile Include="Tree\ClickHandlers\SwitchToConnectionClickHandler.cs" />
|
||||
<Compile Include="Tree\ClickHandlers\TreeNodeCompositeClickHandler.cs" />
|
||||
<Compile Include="UI\Controls\AdTree.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\AdTree.Designer.cs">
|
||||
<DependentUpon>AdTree.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\Base\NGButton.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
@@ -576,6 +605,9 @@
|
||||
<Compile Include="UI\Forms\OptionsPages\AppearancePage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Forms\OptionsPages\ComponentsPage.Designer.cs">
|
||||
<DependentUpon>ComponentsPage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\Forms\OptionsPages\CredentialsPage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
@@ -686,11 +718,6 @@
|
||||
<Compile Include="UI\Forms\PasswordForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Resources\Language\Language.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Language.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Messages\Message.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
@@ -771,11 +798,11 @@
|
||||
<Compile Include="UI\TaskDialog\frmTaskDialog.designer.cs">
|
||||
<DependentUpon>frmTaskDialog.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\Window\AboutWindow.cs">
|
||||
<Compile Include="UI\Forms\FrmAbout.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Window\AboutWindow.Designer.cs">
|
||||
<DependentUpon>AboutWindow.cs</DependentUpon>
|
||||
<Compile Include="UI\Forms\FrmAbout.Designer.cs">
|
||||
<DependentUpon>FrmAbout.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\Window\ActiveDirectoryImportWindow.Designer.cs">
|
||||
<DependentUpon>ActiveDirectoryImportWindow.cs</DependentUpon>
|
||||
@@ -786,8 +813,8 @@
|
||||
<Compile Include="UI\Window\BaseWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Window\ComponentsCheckWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
<Compile Include="UI\Forms\OptionsPages\ComponentsPage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Window\ConfigWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
@@ -873,6 +900,9 @@
|
||||
<LastGenOutput>ColorMapTheme.Designer.cs</LastGenOutput>
|
||||
<CustomToolNamespace>mRemoteNG</CustomToolNamespace>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\Controls\AdTree.resx">
|
||||
<DependentUpon>AdTree.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\Controls\Base\NGButton.resx">
|
||||
<DependentUpon>NGButton.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -1029,7 +1059,7 @@
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<CustomToolNamespace>mRemoteNG</CustomToolNamespace>
|
||||
<SubType>Designer</SubType>
|
||||
<LastGenOutput>Language1.Designer.cs</LastGenOutput>
|
||||
<LastGenOutput>Language.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Resources\Language\Language.fr.resx">
|
||||
<SubType>Designer</SubType>
|
||||
@@ -1074,8 +1104,8 @@
|
||||
<EmbeddedResource Include="UI\TaskDialog\frmTaskDialog.resx">
|
||||
<DependentUpon>frmTaskDialog.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\Window\AboutWindow.resx">
|
||||
<DependentUpon>AboutWindow.cs</DependentUpon>
|
||||
<EmbeddedResource Include="UI\Forms\FrmAbout.resx">
|
||||
<DependentUpon>FrmAbout.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\Window\ActiveDirectoryImportWindow.resx">
|
||||
@@ -1085,8 +1115,8 @@
|
||||
<EmbeddedResource Include="UI\Window\BaseWindow.resx">
|
||||
<DependentUpon>BaseWindow.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\Window\ComponentsCheckWindow.resx">
|
||||
<DependentUpon>ComponentsCheckWindow.cs</DependentUpon>
|
||||
<EmbeddedResource Include="UI\Forms\OptionsPages\ComponentsPage.resx">
|
||||
<DependentUpon>ComponentsPage.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\Window\ConfigWindow.resx">
|
||||
@@ -1202,6 +1232,7 @@
|
||||
<None Include="Documentation\images\connections_status.png" />
|
||||
<None Include="Documentation\images\putty.png" />
|
||||
<Content Include="Console.ico" />
|
||||
<Content Include="Documentation\images\ssh_tunnel.png" />
|
||||
<Content Include="Documentation\mssql_db_setup.sql" />
|
||||
<Content Include="Documentation\mysql_db_setup.sql" />
|
||||
<None Include="Documentation\images\config_top_bar.png" />
|
||||
@@ -1223,6 +1254,8 @@
|
||||
<None Include="Documentation\images\connections_open.png" />
|
||||
<None Include="Documentation\images\screenshot_manager_rightclick_menu.png" />
|
||||
<None Include="Documentation\images\screenshot_manager_overview.png" />
|
||||
<Content Include="Icons\Console.ico" />
|
||||
<Content Include="Icons\Admin.ico" />
|
||||
<Content Include="Icons\Apple.ico">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
@@ -1270,6 +1303,15 @@
|
||||
<None Include="Resources\Images\tab_edit.png" />
|
||||
<None Include="Resources\Images\tab_delete.png" />
|
||||
<None Include="Resources\Images\star.png" />
|
||||
<Content Include="Icons\Infrastructure.ico">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Icons\Production.ico">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Icons\Staging.ico">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Icons\PowerShell.ico">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
@@ -1409,7 +1451,7 @@
|
||||
<None Include="Documentation\installation.rst" />
|
||||
<None Include="Documentation\installation\minimum_requirements.rst" />
|
||||
<None Include="Documentation\installation\uninstall.rst" />
|
||||
<None Include="Documentation\howtos\jumpservers.rst" />
|
||||
<None Include="Documentation\howtos\sshtunnel.rst" />
|
||||
<None Include="Documentation\user_interface.rst" />
|
||||
<None Include="Documentation\user_interface\main_window.rst" />
|
||||
<None Include="Documentation\user_interface\panels.rst" />
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
||||
<package id="cef.redist.x64" version="79.1.35" targetFramework="net472" />
|
||||
<package id="cef.redist.x86" version="79.1.35" targetFramework="net472" />
|
||||
<package id="CefSharp.Common" version="79.1.350" targetFramework="net472" />
|
||||
<package id="CefSharp.WinForms" version="79.1.350" targetFramework="net472" />
|
||||
<package id="ConsoleControl" version="1.2.1" targetFramework="net472" />
|
||||
<package id="ConsoleControlAPI" version="1.2.1" targetFramework="net472" />
|
||||
<package id="BouncyCastle" version="1.8.6.1" targetFramework="net472" />
|
||||
<package id="ConsoleControl" version="1.3.0" targetFramework="net472" />
|
||||
<package id="ConsoleControlAPI" version="1.3.0" targetFramework="net472" />
|
||||
<package id="DockPanelSuite" version="3.0.6" targetFramework="net472" />
|
||||
<package id="DockPanelSuite.ThemeVS2003" version="3.0.6" targetFramework="net472" />
|
||||
<package id="DockPanelSuite.ThemeVS2012" version="3.0.6" targetFramework="net472" />
|
||||
<package id="DockPanelSuite.ThemeVS2013" version="3.0.6" targetFramework="net472" />
|
||||
<package id="DockPanelSuite.ThemeVS2015" version="3.0.6" targetFramework="net472" />
|
||||
<package id="Geckofx60.32" version="60.0.39" targetFramework="net472" />
|
||||
<package id="Google.Protobuf" version="3.9.2" targetFramework="net472" />
|
||||
<package id="Geckofx60.32" version="60.0.44" targetFramework="net472" />
|
||||
<package id="Google.Protobuf" version="3.12.1" targetFramework="net472" />
|
||||
<package id="K4os.Compression.LZ4" version="1.1.11" targetFramework="net472" />
|
||||
<package id="K4os.Compression.LZ4.Streams" version="1.1.11" targetFramework="net472" />
|
||||
<package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net472" />
|
||||
<package id="log4net" version="2.0.8" targetFramework="net472" />
|
||||
<package id="Markdig" version="0.17.1" targetFramework="net472" />
|
||||
<package id="MySql.Data" version="8.0.17" targetFramework="net472" />
|
||||
<package id="NUnit3TestAdapter" version="3.15.1" targetFramework="net472" />
|
||||
<package id="MySql.Data" version="8.0.20" targetFramework="net472" />
|
||||
<package id="NUnit3TestAdapter" version="3.16.1" targetFramework="net472" developmentDependency="true" />
|
||||
<package id="ObjectListView.Official" version="2.9.1" targetFramework="net472" />
|
||||
<package id="SSH.NET" version="2016.1.0" targetFramework="net472" />
|
||||
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
|
||||
<package id="System.Memory" version="4.5.4" targetFramework="net472" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.1" targetFramework="net472" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user