mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-25 19:38:37 +08:00
Merge branch 'develop' into develop
This commit is contained in:
@@ -1,15 +1,29 @@
|
|||||||
1.77.0 (2018-xx-xx):
|
1.77.0 (2019-xx-xx):
|
||||||
|
|
||||||
Features/Enhancements:
|
Features/Enhancements:
|
||||||
----------------------
|
----------------------
|
||||||
|
#1336: Added ability to run External tools on folders
|
||||||
|
#1320: Added ability to favorite items in the connection tree
|
||||||
|
#1318: Added support for saving connections in MySQL
|
||||||
|
#1246: Improved connections loading to tolerate missing attributes in the confCons xml file
|
||||||
#1223: Open External Links in Default Web Browser
|
#1223: Open External Links in Default Web Browser
|
||||||
|
#1220: Added an Apple/Mac connection icon
|
||||||
|
#1218: A splashscreen has been added when mRemoteNG starts
|
||||||
|
#1216: Connection tree search bar can be placed at the top or bottom of connection tree
|
||||||
|
#1201: The help files packaged with mRemoteNG have been rewritten
|
||||||
|
#1186: Certain dialogs are not correctly using localized text for buttons
|
||||||
|
#1170: The Options window no longer displays in the Windows taskbar when open
|
||||||
|
#1159: Added a dialog that will display when unhandled exceptions occur
|
||||||
#1141: 'Copy Hostname' option added to connection tree context menu
|
#1141: 'Copy Hostname' option added to connection tree context menu
|
||||||
#1129: Spanish translation improvements
|
#1129: Spanish translation improvements
|
||||||
#1072: Russian translation improvements
|
#1072: Russian translation improvements
|
||||||
#1016: Chinese (simplified) translation improvements
|
#1016: Chinese (simplified) translation improvements
|
||||||
#951: Added property to Enable/Disable Clipboard Sharing for RDP connections
|
#951: Added property to Enable/Disable Clipboard Sharing for RDP connections
|
||||||
|
#929: Added the hostname to certain RDP error/disconnect messages where it was missing
|
||||||
#928: Add context menu items to 'Close all but this' and 'Close all tabs to the right'
|
#928: Add context menu items to 'Close all but this' and 'Close all tabs to the right'
|
||||||
#765: Port Scan Issues (single port scan option now available)
|
#765: Port Scan Issues (single port scan option now available)
|
||||||
|
#416: Added ability to Enable/Disable Clipboard Sharing for RDP connections
|
||||||
|
#321: Added support for displaying on HiDPI screens
|
||||||
#155: Replace MagicLibrary with DockPanelSuite
|
#155: Replace MagicLibrary with DockPanelSuite
|
||||||
#154: MR-139: Close Button on Each Tab - new default theme has a close button on each tab
|
#154: MR-139: Close Button on Each Tab - new default theme has a close button on each tab
|
||||||
|
|
||||||
@@ -21,9 +35,32 @@ Fixes:
|
|||||||
#1238: Connection panel not translated until opened for the first time
|
#1238: Connection panel not translated until opened for the first time
|
||||||
#1186: Fixed several dialog boxes to use localized button text
|
#1186: Fixed several dialog boxes to use localized button text
|
||||||
#1170: Prevent Options window from showing up in taskbar
|
#1170: Prevent Options window from showing up in taskbar
|
||||||
|
#1132: loadbalanceinfo field now correctly imported from RDP files
|
||||||
#1064: "Esc" button does does not close some dialogs
|
#1064: "Esc" button does does not close some dialogs
|
||||||
#1044: Dragging (grabbing) the program window requires 2 clicks
|
#1044: Dragging (grabbing) the program window requires 2 clicks
|
||||||
|
|
||||||
|
|
||||||
|
1.76.18 (2019-03-20):
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
------
|
||||||
|
#1365: PuTTY window not centered after 0.71 update
|
||||||
|
|
||||||
|
|
||||||
|
1.76.17 (2019-03-20):
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
------
|
||||||
|
#1362: Updated PuTTYNG to 0.71
|
||||||
|
|
||||||
|
|
||||||
|
1.76.16 (2019-03-14):
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
------
|
||||||
|
#1347: Remote Desktop Gateway username field encrypted instead of password
|
||||||
|
|
||||||
|
|
||||||
1.76.15 (2019-03-09):
|
1.76.15 (2019-03-09):
|
||||||
|
|
||||||
Fixes:
|
Fixes:
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ Stephan (github.com/st-schuler)
|
|||||||
Aleksey Reytsman (github.com/areytsman)
|
Aleksey Reytsman (github.com/areytsman)
|
||||||
Cristian Abelleira (github.com/CrAbelleira)
|
Cristian Abelleira (github.com/CrAbelleira)
|
||||||
github.com/MitchellBot
|
github.com/MitchellBot
|
||||||
|
github.com/mjbnz
|
||||||
|
|
||||||
|
|
||||||
Past Contributors
|
Past Contributors
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace mRemoteNGTests.Config.Serializers.Versioning
|
|||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
var sqlConnector = Substitute.For<SqlDatabaseConnector>("", "", "", "");
|
var sqlConnector = Substitute.For<MSSqlDatabaseConnector>("", "", "", "");
|
||||||
_versionUpgrader = new SqlVersion22To23Upgrader(sqlConnector);
|
_versionUpgrader = new SqlVersion22To23Upgrader(sqlConnector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace mRemoteNGTests.Config.Serializers.Versioning
|
|||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
var sqlConnector = Substitute.For<SqlDatabaseConnector>("", "", "", "");
|
var sqlConnector = Substitute.For<MSSqlDatabaseConnector>("", "", "", "");
|
||||||
_versionUpgrader = new SqlVersion23To24Upgrader(sqlConnector);
|
_versionUpgrader = new SqlVersion23To24Upgrader(sqlConnector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace mRemoteNGTests.Config.Serializers.Versioning
|
|||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
var sqlConnector = Substitute.For<SqlDatabaseConnector>("", "", "", "");
|
var sqlConnector = Substitute.For<MSSqlDatabaseConnector>("", "", "", "");
|
||||||
_versionUpgrader = new SqlVersion24To25Upgrader(sqlConnector);
|
_versionUpgrader = new SqlVersion24To25Upgrader(sqlConnector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace mRemoteNGTests.Config.Serializers.Versioning
|
|||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
var sqlConnector = Substitute.For<SqlDatabaseConnector>("", "", "", "");
|
var sqlConnector = Substitute.For<MSSqlDatabaseConnector>("", "", "", "");
|
||||||
_versionUpgrader = new SqlVersion25To26Upgrader(sqlConnector);
|
_versionUpgrader = new SqlVersion25To26Upgrader(sqlConnector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
public static readonly string DefaultConnectionsPath = SettingsFileInfo.SettingsPath;
|
public static readonly string DefaultConnectionsPath = SettingsFileInfo.SettingsPath;
|
||||||
public static readonly string DefaultConnectionsFile = "confCons.xml";
|
public static readonly string DefaultConnectionsFile = "confCons.xml";
|
||||||
public static readonly string DefaultConnectionsFileNew = "confConsNew.xml";
|
public static readonly string DefaultConnectionsFileNew = "confConsNew.xml";
|
||||||
public static readonly double ConnectionFileVersion = 2.6;
|
public static readonly double ConnectionFileVersion = 2.7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,23 +4,23 @@ using mRemoteNG.Config.DatabaseConnectors;
|
|||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.SqlClient;
|
using System.Data.Common;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace mRemoteNG.Config.Connections
|
namespace mRemoteNG.Config.Connections
|
||||||
{
|
{
|
||||||
public class SqlConnectionsUpdateChecker : IConnectionsUpdateChecker
|
public class SqlConnectionsUpdateChecker : IConnectionsUpdateChecker
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlConnector;
|
private readonly IDatabaseConnector _dbConnector;
|
||||||
private readonly SqlCommand _sqlQuery;
|
private readonly DbCommand _dbQuery;
|
||||||
private DateTime LastUpdateTime => Runtime.ConnectionsService.LastSqlUpdate;
|
private DateTime LastUpdateTime => Runtime.ConnectionsService.LastSqlUpdate;
|
||||||
private DateTime _lastDatabaseUpdateTime;
|
private DateTime _lastDatabaseUpdateTime;
|
||||||
|
|
||||||
|
|
||||||
public SqlConnectionsUpdateChecker()
|
public SqlConnectionsUpdateChecker()
|
||||||
{
|
{
|
||||||
_sqlConnector = DatabaseConnectorFactory.SqlDatabaseConnectorFromSettings();
|
_dbConnector = DatabaseConnectorFactory.DatabaseConnectorFromSettings();
|
||||||
_sqlQuery = new SqlCommand("SELECT * FROM tblUpdate", _sqlConnector.SqlConnection);
|
_dbQuery = _dbConnector.DbCommand("SELECT * FROM tblUpdate");
|
||||||
_lastDatabaseUpdateTime = default(DateTime);
|
_lastDatabaseUpdateTime = default(DateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ namespace mRemoteNG.Config.Connections
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_sqlConnector.Connect();
|
_dbConnector.Connect();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -76,7 +76,7 @@ namespace mRemoteNG.Config.Connections
|
|||||||
var lastUpdateInDb = default(DateTime);
|
var lastUpdateInDb = default(DateTime);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sqlReader = _sqlQuery.ExecuteReader(CommandBehavior.CloseConnection);
|
var sqlReader = _dbQuery.ExecuteReader(CommandBehavior.CloseConnection);
|
||||||
sqlReader.Read();
|
sqlReader.Read();
|
||||||
if (sqlReader.HasRows)
|
if (sqlReader.HasRows)
|
||||||
lastUpdateInDb = Convert.ToDateTime(sqlReader["LastUpdate"]);
|
lastUpdateInDb = Convert.ToDateTime(sqlReader["LastUpdate"]);
|
||||||
@@ -114,7 +114,7 @@ namespace mRemoteNG.Config.Connections
|
|||||||
private void RaiseConnectionsUpdateAvailableEvent()
|
private void RaiseConnectionsUpdateAvailableEvent()
|
||||||
{
|
{
|
||||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Remote connection update is available");
|
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Remote connection update is available");
|
||||||
var args = new ConnectionsUpdateAvailableEventArgs(_sqlConnector, _lastDatabaseUpdateTime);
|
var args = new ConnectionsUpdateAvailableEventArgs(_dbConnector, _lastDatabaseUpdateTime);
|
||||||
ConnectionsUpdateAvailable?.Invoke(this, args);
|
ConnectionsUpdateAvailable?.Invoke(this, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,9 +126,9 @@ namespace mRemoteNG.Config.Connections
|
|||||||
private void Dispose(bool itIsSafeToDisposeManagedObjects)
|
private void Dispose(bool itIsSafeToDisposeManagedObjects)
|
||||||
{
|
{
|
||||||
if (!itIsSafeToDisposeManagedObjects) return;
|
if (!itIsSafeToDisposeManagedObjects) return;
|
||||||
_sqlConnector.Disconnect();
|
_dbConnector.Disconnect();
|
||||||
_sqlConnector.Dispose();
|
_dbConnector.Dispose();
|
||||||
_sqlQuery.Dispose();
|
_dbQuery.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ using mRemoteNG.Tree.Root;
|
|||||||
|
|
||||||
namespace mRemoteNG.Config.Connections
|
namespace mRemoteNG.Config.Connections
|
||||||
{
|
{
|
||||||
public class SqlConnectionsLoader : IConnectionsLoader
|
public class SqlConnectionsLoader : IConnectionsLoader
|
||||||
{
|
{
|
||||||
private readonly IDeserializer<string, IEnumerable<LocalConnectionPropertiesModel>>
|
private readonly IDeserializer<string, IEnumerable<LocalConnectionPropertiesModel>>
|
||||||
_localConnectionPropertiesDeserializer;
|
_localConnectionPropertiesDeserializer;
|
||||||
@@ -38,7 +38,7 @@ namespace mRemoteNG.Config.Connections
|
|||||||
|
|
||||||
public ConnectionTreeModel Load()
|
public ConnectionTreeModel Load()
|
||||||
{
|
{
|
||||||
var connector = DatabaseConnectorFactory.SqlDatabaseConnectorFromSettings();
|
var connector = DatabaseConnectorFactory.DatabaseConnectorFromSettings();
|
||||||
var dataProvider = new SqlDataProvider(connector);
|
var dataProvider = new SqlDataProvider(connector);
|
||||||
var metaDataRetriever = new SqlDatabaseMetaDataRetriever();
|
var metaDataRetriever = new SqlDatabaseMetaDataRetriever();
|
||||||
var databaseVersionVerifier = new SqlDatabaseVersionVerifier(connector);
|
var databaseVersionVerifier = new SqlDatabaseVersionVerifier(connector);
|
||||||
@@ -93,7 +93,7 @@ namespace mRemoteNG.Config.Connections
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private SqlConnectionListMetaData HandleFirstRun(SqlDatabaseMetaDataRetriever metaDataRetriever, SqlDatabaseConnector connector)
|
private SqlConnectionListMetaData HandleFirstRun(SqlDatabaseMetaDataRetriever metaDataRetriever, IDatabaseConnector connector)
|
||||||
{
|
{
|
||||||
metaDataRetriever.WriteDatabaseMetaData(new RootNodeInfo(RootNodeType.Connection), connector);
|
metaDataRetriever.WriteDatabaseMetaData(new RootNodeInfo(RootNodeType.Connection), connector);
|
||||||
return metaDataRetriever.GetDatabaseMetaData(connector);
|
return metaDataRetriever.GetDatabaseMetaData(connector);
|
||||||
|
|||||||
@@ -59,12 +59,12 @@ namespace mRemoteNG.Config.Connections
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var sqlConnector = DatabaseConnectorFactory.SqlDatabaseConnectorFromSettings())
|
using (var dbConnector = DatabaseConnectorFactory.DatabaseConnectorFromSettings())
|
||||||
{
|
{
|
||||||
sqlConnector.Connect();
|
dbConnector.Connect();
|
||||||
var databaseVersionVerifier = new SqlDatabaseVersionVerifier(sqlConnector);
|
var databaseVersionVerifier = new SqlDatabaseVersionVerifier(dbConnector);
|
||||||
var metaDataRetriever = new SqlDatabaseMetaDataRetriever();
|
var metaDataRetriever = new SqlDatabaseMetaDataRetriever();
|
||||||
var metaData = metaDataRetriever.GetDatabaseMetaData(sqlConnector);
|
var metaData = metaDataRetriever.GetDatabaseMetaData(dbConnector);
|
||||||
|
|
||||||
if (!databaseVersionVerifier.VerifyDatabaseVersion(metaData.ConfVersion))
|
if (!databaseVersionVerifier.VerifyDatabaseVersion(metaData.ConfVersion))
|
||||||
{
|
{
|
||||||
@@ -73,9 +73,10 @@ namespace mRemoteNG.Config.Connections
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
metaDataRetriever.WriteDatabaseMetaData(rootTreeNode, sqlConnector);
|
metaDataRetriever.WriteDatabaseMetaData(rootTreeNode, dbConnector);
|
||||||
UpdateConnectionsTable(rootTreeNode, sqlConnector);
|
UpdateConnectionsTable(rootTreeNode, dbConnector);
|
||||||
UpdateUpdatesTable(sqlConnector);
|
UpdateUpdatesTable(dbConnector);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Saved connections to database");
|
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Saved connections to database");
|
||||||
@@ -111,7 +112,7 @@ namespace mRemoteNG.Config.Connections
|
|||||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Saved local connection properties");
|
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Saved local connection properties");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateRootNodeTable(RootNodeInfo rootTreeNode, SqlDatabaseConnector sqlDatabaseConnector)
|
private void UpdateRootNodeTable(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||||
string strProtected;
|
string strProtected;
|
||||||
@@ -132,19 +133,17 @@ namespace mRemoteNG.Config.Connections
|
|||||||
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
var sqlQuery = new SqlCommand("DELETE FROM tblRoot", sqlDatabaseConnector.SqlConnection);
|
var dbQuery = databaseConnector.DbCommand("DELETE FROM tblRoot");
|
||||||
sqlQuery.ExecuteNonQuery();
|
dbQuery.ExecuteNonQuery();
|
||||||
|
|
||||||
if (rootTreeNode != null)
|
if (rootTreeNode != null)
|
||||||
{
|
{
|
||||||
sqlQuery =
|
dbQuery =
|
||||||
new SqlCommand(
|
databaseConnector.DbCommand(
|
||||||
"INSERT INTO tblRoot (Name, Export, Protected, ConfVersion) VALUES(\'" +
|
"INSERT INTO tblRoot (Name, Export, Protected, ConfVersion) VALUES(\'" +
|
||||||
MiscTools.PrepareValueForDB(rootTreeNode.Name) + "\', 0, \'" + strProtected + "\'," +
|
MiscTools.PrepareValueForDB(rootTreeNode.Name) + "\', 0, \'" + strProtected + "\'," +
|
||||||
ConnectionsFileInfo.ConnectionFileVersion.ToString(CultureInfo.InvariantCulture) +
|
ConnectionsFileInfo.ConnectionFileVersion.ToString(CultureInfo.InvariantCulture) + ")");
|
||||||
")",
|
dbQuery.ExecuteNonQuery();
|
||||||
sqlDatabaseConnector.SqlConnection);
|
|
||||||
sqlQuery.ExecuteNonQuery();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -153,28 +152,26 @@ namespace mRemoteNG.Config.Connections
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateConnectionsTable(RootNodeInfo rootTreeNode, SqlDatabaseConnector sqlDatabaseConnector)
|
private void UpdateConnectionsTable(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
var cryptoProvider = new LegacyRijndaelCryptographyProvider();
|
var cryptoProvider = new LegacyRijndaelCryptographyProvider();
|
||||||
var serializer = new DataTableSerializer(_saveFilter, cryptoProvider,
|
var serializer = new DataTableSerializer(_saveFilter, cryptoProvider,
|
||||||
rootTreeNode.PasswordString.ConvertToSecureString());
|
rootTreeNode.PasswordString.ConvertToSecureString());
|
||||||
var dataTable = serializer.Serialize(rootTreeNode);
|
var dataTable = serializer.Serialize(rootTreeNode);
|
||||||
var dataProvider = new SqlDataProvider(sqlDatabaseConnector);
|
var dataProvider = new SqlDataProvider(databaseConnector);
|
||||||
|
|
||||||
|
var dbQuery = databaseConnector.DbCommand("DELETE FROM tblCons");
|
||||||
|
dbQuery.ExecuteNonQuery();
|
||||||
|
|
||||||
var sqlQuery = new SqlCommand("DELETE FROM tblCons", sqlDatabaseConnector.SqlConnection);
|
|
||||||
sqlQuery.ExecuteNonQuery();
|
|
||||||
dataProvider.Save(dataTable);
|
dataProvider.Save(dataTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateUpdatesTable(SqlDatabaseConnector sqlDatabaseConnector)
|
private void UpdateUpdatesTable(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
var sqlQuery = new SqlCommand("DELETE FROM tblUpdate", sqlDatabaseConnector.SqlConnection);
|
var dbQuery = databaseConnector.DbCommand("DELETE FROM tblUpdate");
|
||||||
sqlQuery.ExecuteNonQuery();
|
dbQuery.ExecuteNonQuery();
|
||||||
sqlQuery = new SqlCommand(
|
dbQuery = databaseConnector.DbCommand("INSERT INTO tblUpdate (LastUpdate) VALUES(\'" + MiscTools.DBDate(DateTime.Now) + "\')");
|
||||||
"INSERT INTO tblUpdate (LastUpdate) VALUES(\'" + MiscTools.DBDate(DateTime.Now) +
|
dbQuery.ExecuteNonQuery();
|
||||||
"\')",
|
|
||||||
sqlDatabaseConnector.SqlConnection);
|
|
||||||
sqlQuery.ExecuteNonQuery();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SqlUserIsReadOnly()
|
private bool SqlUserIsReadOnly()
|
||||||
|
|||||||
@@ -1,66 +1,93 @@
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.SqlClient;
|
|
||||||
using mRemoteNG.Config.DatabaseConnectors;
|
using mRemoteNG.Config.DatabaseConnectors;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using mRemoteNG.App;
|
using mRemoteNG.App;
|
||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
using System.Data.SqlClient;
|
||||||
|
|
||||||
namespace mRemoteNG.Config.DataProviders
|
namespace mRemoteNG.Config.DataProviders
|
||||||
{
|
{
|
||||||
public class SqlDataProvider : IDataProvider<DataTable>
|
public class SqlDataProvider : IDataProvider<DataTable>
|
||||||
{
|
{
|
||||||
public SqlDatabaseConnector SqlDatabaseConnector { get; }
|
public IDatabaseConnector DatabaseConnector { get; }
|
||||||
|
|
||||||
public SqlDataProvider(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlDataProvider(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
SqlDatabaseConnector = sqlDatabaseConnector;
|
DatabaseConnector = databaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataTable Load()
|
public DataTable Load()
|
||||||
{
|
{
|
||||||
var dataTable = new DataTable();
|
var dataTable = new DataTable();
|
||||||
var sqlQuery = new SqlCommand("SELECT * FROM tblCons ORDER BY PositionID ASC");
|
var dbQuery = DatabaseConnector.DbCommand("SELECT * FROM tblCons ORDER BY PositionID ASC");
|
||||||
SqlDatabaseConnector.AssociateItemToThisConnector(sqlQuery);
|
DatabaseConnector.AssociateItemToThisConnector(dbQuery);
|
||||||
if (!SqlDatabaseConnector.IsConnected)
|
if (!DatabaseConnector.IsConnected)
|
||||||
OpenConnection();
|
OpenConnection();
|
||||||
var sqlDataReader = sqlQuery.ExecuteReader(CommandBehavior.CloseConnection);
|
var dbDataReader = dbQuery.ExecuteReader(CommandBehavior.CloseConnection);
|
||||||
|
|
||||||
if (sqlDataReader.HasRows)
|
if (dbDataReader.HasRows)
|
||||||
dataTable.Load(sqlDataReader);
|
dataTable.Load(dbDataReader);
|
||||||
sqlDataReader.Close();
|
dbDataReader.Close();
|
||||||
return dataTable;
|
return dataTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save(DataTable dataTable)
|
public void Save(DataTable dataTable)
|
||||||
{
|
{
|
||||||
if (SqlUserIsReadOnly())
|
if (DbUserIsReadOnly())
|
||||||
{
|
{
|
||||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||||
"Trying to save connections but the SQL read only checkbox is checked, aborting!");
|
"Trying to save connections but the SQL read only checkbox is checked, aborting!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SqlDatabaseConnector.IsConnected)
|
if (!DatabaseConnector.IsConnected)
|
||||||
OpenConnection();
|
OpenConnection();
|
||||||
using (var sqlBulkCopy = new SqlBulkCopy(SqlDatabaseConnector.SqlConnection))
|
if (DatabaseConnector.GetType() == typeof(MSSqlDatabaseConnector))
|
||||||
{
|
{
|
||||||
foreach (DataColumn col in dataTable.Columns)
|
using (var sqlBulkCopy = new SqlBulkCopy((SqlConnection)DatabaseConnector.DbConnection()))
|
||||||
sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
{
|
||||||
sqlBulkCopy.DestinationTableName = "dbo.tblCons";
|
foreach (DataColumn col in dataTable.Columns)
|
||||||
sqlBulkCopy.WriteToServer(dataTable);
|
sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
||||||
|
sqlBulkCopy.DestinationTableName = "dbo.tblCons";
|
||||||
|
sqlBulkCopy.WriteToServer(dataTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (DatabaseConnector.GetType() == typeof(MySqlDatabaseConnector))
|
||||||
|
{
|
||||||
|
var dbConnection = (MySqlConnection) DatabaseConnector.DbConnection();
|
||||||
|
using (MySqlTransaction transaction = dbConnection.BeginTransaction(System.Data.IsolationLevel.Serializable))
|
||||||
|
{
|
||||||
|
using (MySqlCommand sqlCommand = new MySqlCommand())
|
||||||
|
{
|
||||||
|
sqlCommand.Connection = dbConnection;
|
||||||
|
sqlCommand.Transaction = transaction;
|
||||||
|
sqlCommand.CommandText = "SELECT * FROM tblCons";
|
||||||
|
using (MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sqlCommand))
|
||||||
|
{
|
||||||
|
dataAdapter.UpdateBatchSize = 1000;
|
||||||
|
using (MySqlCommandBuilder cb = new MySqlCommandBuilder(dataAdapter))
|
||||||
|
{
|
||||||
|
dataAdapter.Update(dataTable);
|
||||||
|
transaction.Commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenConnection()
|
public void OpenConnection()
|
||||||
{
|
{
|
||||||
SqlDatabaseConnector.Connect();
|
DatabaseConnector.Connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CloseConnection()
|
public void CloseConnection()
|
||||||
{
|
{
|
||||||
SqlDatabaseConnector.Disconnect();
|
DatabaseConnector.Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SqlUserIsReadOnly()
|
private bool DbUserIsReadOnly()
|
||||||
{
|
{
|
||||||
return mRemoteNG.Settings.Default.SQLReadOnly;
|
return mRemoteNG.Settings.Default.SQLReadOnly;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,18 +7,19 @@ namespace mRemoteNG.Config.DatabaseConnectors
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A helper class for testing database connectivity
|
/// A helper class for testing database connectivity
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SqlDatabaseConnectionTester
|
public class DatabaseConnectionTester
|
||||||
{
|
{
|
||||||
public async Task<ConnectionTestResult> TestConnectivity(string server,
|
public async Task<ConnectionTestResult> TestConnectivity(string type,
|
||||||
|
string server,
|
||||||
string database,
|
string database,
|
||||||
string username,
|
string username,
|
||||||
string password)
|
string password)
|
||||||
{
|
{
|
||||||
using (var sqlConnector = new SqlDatabaseConnector(server, database, username, password))
|
using (var dbConnector = DatabaseConnectorFactory.DatabaseConnector(type, server, database, username, password))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await sqlConnector.ConnectAsync();
|
await dbConnector.ConnectAsync();
|
||||||
return ConnectionTestResult.ConnectionSucceded;
|
return ConnectionTestResult.ConnectionSucceded;
|
||||||
}
|
}
|
||||||
catch (SqlException sqlException)
|
catch (SqlException sqlException)
|
||||||
@@ -5,14 +5,28 @@ namespace mRemoteNG.Config.DatabaseConnectors
|
|||||||
{
|
{
|
||||||
public class DatabaseConnectorFactory
|
public class DatabaseConnectorFactory
|
||||||
{
|
{
|
||||||
public static SqlDatabaseConnector SqlDatabaseConnectorFromSettings()
|
public static IDatabaseConnector DatabaseConnectorFromSettings()
|
||||||
{
|
{
|
||||||
|
var sqlType = mRemoteNG.Settings.Default.SQLServerType;
|
||||||
var sqlHost = mRemoteNG.Settings.Default.SQLHost;
|
var sqlHost = mRemoteNG.Settings.Default.SQLHost;
|
||||||
var sqlCatalog = mRemoteNG.Settings.Default.SQLDatabaseName;
|
var sqlCatalog = mRemoteNG.Settings.Default.SQLDatabaseName;
|
||||||
var sqlUsername = mRemoteNG.Settings.Default.SQLUser;
|
var sqlUsername = mRemoteNG.Settings.Default.SQLUser;
|
||||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||||
var sqlPassword = cryptographyProvider.Decrypt(mRemoteNG.Settings.Default.SQLPass, Runtime.EncryptionKey);
|
var sqlPassword = cryptographyProvider.Decrypt(mRemoteNG.Settings.Default.SQLPass, Runtime.EncryptionKey);
|
||||||
return new SqlDatabaseConnector(sqlHost, sqlCatalog, sqlUsername, sqlPassword);
|
|
||||||
|
return DatabaseConnector(sqlType, sqlHost, sqlCatalog, sqlUsername, sqlPassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IDatabaseConnector DatabaseConnector(string type, string server, string database, string username, string password)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case "mysql":
|
||||||
|
return new MySqlDatabaseConnector(server, database, username, password);
|
||||||
|
case "mssql":
|
||||||
|
default:
|
||||||
|
return new MSSqlDatabaseConnector(server, database, username, password);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,17 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
using System.Data.Common;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace mRemoteNG.Config.DatabaseConnectors
|
namespace mRemoteNG.Config.DatabaseConnectors
|
||||||
{
|
{
|
||||||
public interface IDatabaseConnector : IDisposable
|
public interface IDatabaseConnector : IDisposable
|
||||||
{
|
{
|
||||||
|
DbConnection DbConnection();
|
||||||
|
DbCommand DbCommand(string dbCommand);
|
||||||
bool IsConnected { get; }
|
bool IsConnected { get; }
|
||||||
void Connect();
|
void Connect();
|
||||||
|
Task ConnectAsync();
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
void AssociateItemToThisConnector(SqlCommand sqlCommand);
|
void AssociateItemToThisConnector(DbCommand dbCommand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Data.SqlClient;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
// ReSharper disable ArrangeAccessorOwnerBody
|
||||||
|
|
||||||
|
namespace mRemoteNG.Config.DatabaseConnectors
|
||||||
|
{
|
||||||
|
public class MSSqlDatabaseConnector : IDatabaseConnector
|
||||||
|
{
|
||||||
|
private DbConnection _dbConnection { get; set; } = default(SqlConnection);
|
||||||
|
private string _dbConnectionString = "";
|
||||||
|
private readonly string _dbHost;
|
||||||
|
private readonly string _dbCatalog;
|
||||||
|
private readonly string _dbUsername;
|
||||||
|
private readonly string _dbPassword;
|
||||||
|
|
||||||
|
public DbConnection DbConnection()
|
||||||
|
{
|
||||||
|
return _dbConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DbCommand DbCommand(string dbCommand)
|
||||||
|
{
|
||||||
|
return new SqlCommand(dbCommand, (SqlConnection) _dbConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsConnected
|
||||||
|
{
|
||||||
|
get { return (_dbConnection.State == ConnectionState.Open); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public MSSqlDatabaseConnector(string sqlServer, string catalog, string username, string password)
|
||||||
|
{
|
||||||
|
_dbHost = sqlServer;
|
||||||
|
_dbCatalog = catalog;
|
||||||
|
_dbUsername = username;
|
||||||
|
_dbPassword = password;
|
||||||
|
Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Initialize()
|
||||||
|
{
|
||||||
|
BuildSqlConnectionString();
|
||||||
|
_dbConnection = new SqlConnection(_dbConnectionString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildSqlConnectionString()
|
||||||
|
{
|
||||||
|
if (_dbUsername != "")
|
||||||
|
BuildDbConnectionStringWithCustomCredentials();
|
||||||
|
else
|
||||||
|
BuildDbConnectionStringWithDefaultCredentials();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildDbConnectionStringWithCustomCredentials()
|
||||||
|
{
|
||||||
|
_dbConnectionString = $"Data Source={_dbHost};Initial Catalog={_dbCatalog};User Id={_dbUsername};Password={_dbPassword}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildDbConnectionStringWithDefaultCredentials()
|
||||||
|
{
|
||||||
|
_dbConnectionString = $"Data Source={_dbHost};Initial Catalog={_dbCatalog};Integrated Security=True";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Connect()
|
||||||
|
{
|
||||||
|
_dbConnection.Open();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task ConnectAsync()
|
||||||
|
{
|
||||||
|
await _dbConnection.OpenAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Disconnect()
|
||||||
|
{
|
||||||
|
_dbConnection.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AssociateItemToThisConnector(DbCommand dbCommand)
|
||||||
|
{
|
||||||
|
dbCommand.Connection = (SqlConnection) _dbConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Dispose(bool itIsSafeToFreeManagedObjects)
|
||||||
|
{
|
||||||
|
if (!itIsSafeToFreeManagedObjects) return;
|
||||||
|
_dbConnection.Close();
|
||||||
|
_dbConnection.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
|
||||||
|
// ReSharper disable ArrangeAccessorOwnerBody
|
||||||
|
|
||||||
|
namespace mRemoteNG.Config.DatabaseConnectors
|
||||||
|
{
|
||||||
|
public class MySqlDatabaseConnector : IDatabaseConnector
|
||||||
|
{
|
||||||
|
private DbConnection _dbConnection { get; set; } = default(MySqlConnection);
|
||||||
|
private string _dbConnectionString = "";
|
||||||
|
private readonly string _dbHost;
|
||||||
|
private readonly string _dbPort;
|
||||||
|
private readonly string _dbName;
|
||||||
|
private readonly string _dbUsername;
|
||||||
|
private readonly string _dbPassword;
|
||||||
|
|
||||||
|
public DbConnection DbConnection()
|
||||||
|
{
|
||||||
|
return _dbConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DbCommand DbCommand(string dbCommand)
|
||||||
|
{
|
||||||
|
return new MySqlCommand(dbCommand, (MySqlConnection) _dbConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsConnected
|
||||||
|
{
|
||||||
|
get { return (_dbConnection.State == ConnectionState.Open); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public MySqlDatabaseConnector(string host, string database, string username, string password)
|
||||||
|
{
|
||||||
|
string[] hostParts = host.Split(new char[]{':'}, 2);
|
||||||
|
_dbHost = hostParts[0];
|
||||||
|
_dbPort = (hostParts.Length == 2)?hostParts[1]:"3306";
|
||||||
|
_dbName = database;
|
||||||
|
_dbUsername = username;
|
||||||
|
_dbPassword = password;
|
||||||
|
Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Initialize()
|
||||||
|
{
|
||||||
|
BuildSqlConnectionString();
|
||||||
|
_dbConnection = new MySqlConnection(_dbConnectionString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildSqlConnectionString()
|
||||||
|
{
|
||||||
|
_dbConnectionString = $"server={_dbHost};user={_dbUsername};database={_dbName};port={_dbPort};password={_dbPassword}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Connect()
|
||||||
|
{
|
||||||
|
_dbConnection.Open();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task ConnectAsync()
|
||||||
|
{
|
||||||
|
await _dbConnection.OpenAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Disconnect()
|
||||||
|
{
|
||||||
|
_dbConnection.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AssociateItemToThisConnector(DbCommand dbCommand)
|
||||||
|
{
|
||||||
|
dbCommand.Connection = (MySqlConnection) _dbConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
}
|
||||||
|
private void Dispose(bool itIsSafeToFreeManagedObjects)
|
||||||
|
{
|
||||||
|
if (!itIsSafeToFreeManagedObjects) return;
|
||||||
|
_dbConnection.Close();
|
||||||
|
_dbConnection.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
using System.Data;
|
|
||||||
using System.Data.SqlClient;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// ReSharper disable ArrangeAccessorOwnerBody
|
|
||||||
|
|
||||||
namespace mRemoteNG.Config.DatabaseConnectors
|
|
||||||
{
|
|
||||||
public class SqlDatabaseConnector : IDatabaseConnector
|
|
||||||
{
|
|
||||||
public SqlConnection SqlConnection { get; private set; } = default(SqlConnection);
|
|
||||||
private string _sqlConnectionString = "";
|
|
||||||
private readonly string _sqlHost;
|
|
||||||
private readonly string _sqlCatalog;
|
|
||||||
private readonly string _sqlUsername;
|
|
||||||
private readonly string _sqlPassword;
|
|
||||||
|
|
||||||
public bool IsConnected
|
|
||||||
{
|
|
||||||
get { return (SqlConnection.State == ConnectionState.Open); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public SqlDatabaseConnector(string sqlServer, string catalog, string username, string password)
|
|
||||||
{
|
|
||||||
_sqlHost = sqlServer;
|
|
||||||
_sqlCatalog = catalog;
|
|
||||||
_sqlUsername = username;
|
|
||||||
_sqlPassword = password;
|
|
||||||
Initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Initialize()
|
|
||||||
{
|
|
||||||
BuildSqlConnectionString();
|
|
||||||
SqlConnection = new SqlConnection(_sqlConnectionString);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BuildSqlConnectionString()
|
|
||||||
{
|
|
||||||
if (_sqlUsername != "")
|
|
||||||
BuildSqlConnectionStringWithCustomCredentials();
|
|
||||||
else
|
|
||||||
BuildSqlConnectionStringWithDefaultCredentials();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BuildSqlConnectionStringWithCustomCredentials()
|
|
||||||
{
|
|
||||||
_sqlConnectionString =
|
|
||||||
$"Data Source={_sqlHost};Initial Catalog={_sqlCatalog};User Id={_sqlUsername};Password={_sqlPassword}";
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BuildSqlConnectionStringWithDefaultCredentials()
|
|
||||||
{
|
|
||||||
_sqlConnectionString = $"Data Source={_sqlHost};Initial Catalog={_sqlCatalog};Integrated Security=True";
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Connect()
|
|
||||||
{
|
|
||||||
SqlConnection.Open();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task ConnectAsync()
|
|
||||||
{
|
|
||||||
await SqlConnection.OpenAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Disconnect()
|
|
||||||
{
|
|
||||||
SqlConnection.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AssociateItemToThisConnector(SqlCommand sqlCommand)
|
|
||||||
{
|
|
||||||
sqlCommand.Connection = SqlConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
Dispose(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Dispose(bool itIsSafeToFreeManagedObjects)
|
|
||||||
{
|
|
||||||
if (!itIsSafeToFreeManagedObjects) return;
|
|
||||||
SqlConnection.Close();
|
|
||||||
SqlConnection.Dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,6 @@ using mRemoteNG.Tree;
|
|||||||
using mRemoteNG.Tree.Root;
|
using mRemoteNG.Tree.Root;
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.SqlTypes;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
|
|
||||||
@@ -72,7 +71,7 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
|||||||
dataTable.Columns.Add("ConstantID", typeof(string));
|
dataTable.Columns.Add("ConstantID", typeof(string));
|
||||||
dataTable.Columns.Add("PositionID", typeof(int));
|
dataTable.Columns.Add("PositionID", typeof(int));
|
||||||
dataTable.Columns.Add("ParentID", typeof(string));
|
dataTable.Columns.Add("ParentID", typeof(string));
|
||||||
dataTable.Columns.Add("LastChange", typeof(SqlDateTime));
|
dataTable.Columns.Add("LastChange", MiscTools.DBTimeStampType());
|
||||||
dataTable.Columns.Add("Name", typeof(string));
|
dataTable.Columns.Add("Name", typeof(string));
|
||||||
dataTable.Columns.Add("Type", typeof(string));
|
dataTable.Columns.Add("Type", typeof(string));
|
||||||
dataTable.Columns.Add("Expanded", typeof(bool));
|
dataTable.Columns.Add("Expanded", typeof(bool));
|
||||||
@@ -215,7 +214,7 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
|||||||
dataRow["ConstantID"] = connectionInfo.ConstantID;
|
dataRow["ConstantID"] = connectionInfo.ConstantID;
|
||||||
dataRow["ParentID"] = connectionInfo.Parent?.ConstantID ?? "";
|
dataRow["ParentID"] = connectionInfo.Parent?.ConstantID ?? "";
|
||||||
dataRow["PositionID"] = _currentNodeIndex;
|
dataRow["PositionID"] = _currentNodeIndex;
|
||||||
dataRow["LastChange"] = (SqlDateTime)DateTime.Now;
|
dataRow["LastChange"] = MiscTools.DBTimeStampNow();
|
||||||
dataRow["Expanded"] =
|
dataRow["Expanded"] =
|
||||||
false; // TODO: this column can eventually be removed. we now save this property locally
|
false; // TODO: this column can eventually be removed. we now save this property locally
|
||||||
dataRow["Description"] = connectionInfo.Description;
|
dataRow["Description"] = connectionInfo.Description;
|
||||||
@@ -276,9 +275,8 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
|||||||
dataRow["RDGatewayUsageMethod"] = connectionInfo.RDGatewayUsageMethod;
|
dataRow["RDGatewayUsageMethod"] = connectionInfo.RDGatewayUsageMethod;
|
||||||
dataRow["RDGatewayHostname"] = connectionInfo.RDGatewayHostname;
|
dataRow["RDGatewayHostname"] = connectionInfo.RDGatewayHostname;
|
||||||
dataRow["RDGatewayUseConnectionCredentials"] = connectionInfo.RDGatewayUseConnectionCredentials;
|
dataRow["RDGatewayUseConnectionCredentials"] = connectionInfo.RDGatewayUseConnectionCredentials;
|
||||||
dataRow["RDGatewayUsername"] =
|
dataRow["RDGatewayUsername"] = connectionInfo.RDGatewayUsername;
|
||||||
_cryptographyProvider.Encrypt(connectionInfo.RDGatewayUsername, _encryptionKey);
|
dataRow["RDGatewayPassword"] = _cryptographyProvider.Encrypt(connectionInfo.RDGatewayPassword, _encryptionKey);
|
||||||
dataRow["RDGatewayPassword"] = connectionInfo.RDGatewayPassword;
|
|
||||||
dataRow["RDGatewayDomain"] = connectionInfo.RDGatewayDomain;
|
dataRow["RDGatewayDomain"] = connectionInfo.RDGatewayDomain;
|
||||||
if (_saveFilter.SaveInheritance)
|
if (_saveFilter.SaveInheritance)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
using System.Data.Common;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using mRemoteNG.App;
|
using mRemoteNG.App;
|
||||||
using mRemoteNG.App.Info;
|
using mRemoteNG.App.Info;
|
||||||
@@ -12,30 +12,31 @@ using mRemoteNG.Tree.Root;
|
|||||||
|
|
||||||
namespace mRemoteNG.Config.Serializers.MsSql
|
namespace mRemoteNG.Config.Serializers.MsSql
|
||||||
{
|
{
|
||||||
public class SqlDatabaseMetaDataRetriever
|
public class SqlDatabaseMetaDataRetriever
|
||||||
{
|
{
|
||||||
public SqlConnectionListMetaData GetDatabaseMetaData(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlConnectionListMetaData GetDatabaseMetaData(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
SqlConnectionListMetaData metaData;
|
SqlConnectionListMetaData metaData;
|
||||||
SqlDataReader sqlDataReader = null;
|
DbDataReader dbDataReader = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sqlCommand = new SqlCommand("SELECT * FROM tblRoot", sqlDatabaseConnector.SqlConnection);
|
var dbCommand = databaseConnector.DbCommand("SELECT * FROM tblRoot");
|
||||||
if (!sqlDatabaseConnector.IsConnected)
|
if (!databaseConnector.IsConnected)
|
||||||
sqlDatabaseConnector.Connect();
|
databaseConnector.Connect();
|
||||||
sqlDataReader = sqlCommand.ExecuteReader();
|
dbDataReader = dbCommand.ExecuteReader();
|
||||||
if (!sqlDataReader.HasRows)
|
if (!dbDataReader.HasRows)
|
||||||
return null; // assume new empty database
|
return null; // assume new empty database
|
||||||
else
|
else
|
||||||
sqlDataReader.Read();
|
dbDataReader.Read();
|
||||||
|
|
||||||
metaData = new SqlConnectionListMetaData
|
metaData = new SqlConnectionListMetaData
|
||||||
{
|
{
|
||||||
Name = sqlDataReader["Name"] as string ?? "",
|
Name = dbDataReader["Name"] as string ?? "",
|
||||||
Protected = sqlDataReader["Protected"] as string ?? "",
|
Protected = dbDataReader["Protected"] as string ?? "",
|
||||||
Export = (bool)sqlDataReader["Export"],
|
Export = (bool)dbDataReader["Export"],
|
||||||
ConfVersion =
|
ConfVersion =
|
||||||
new Version(Convert.ToString(sqlDataReader["confVersion"], CultureInfo.InvariantCulture))
|
new Version(Convert.ToString(dbDataReader["confVersion"], CultureInfo.InvariantCulture))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -45,14 +46,14 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (sqlDataReader != null && !sqlDataReader.IsClosed)
|
if (dbDataReader != null && !dbDataReader.IsClosed)
|
||||||
sqlDataReader.Close();
|
dbDataReader.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
return metaData;
|
return metaData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteDatabaseMetaData(RootNodeInfo rootTreeNode, SqlDatabaseConnector sqlDatabaseConnector)
|
public void WriteDatabaseMetaData(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||||
string strProtected;
|
string strProtected;
|
||||||
@@ -73,18 +74,16 @@ namespace mRemoteNG.Config.Serializers.MsSql
|
|||||||
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
var sqlQuery = new SqlCommand("DELETE FROM tblRoot", sqlDatabaseConnector.SqlConnection);
|
var cmd = databaseConnector.DbCommand("DELETE FROM tblRoot");
|
||||||
sqlQuery.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
if (rootTreeNode != null)
|
if (rootTreeNode != null)
|
||||||
{
|
{
|
||||||
sqlQuery =
|
cmd = databaseConnector.DbCommand(
|
||||||
new SqlCommand(
|
"INSERT INTO tblRoot (Name, Export, Protected, ConfVersion) VALUES(\'" +
|
||||||
"INSERT INTO tblRoot (Name, Export, Protected, ConfVersion) VALUES(\'" +
|
|
||||||
MiscTools.PrepareValueForDB(rootTreeNode.Name) + "\', 0, \'" + strProtected + "\'," +
|
MiscTools.PrepareValueForDB(rootTreeNode.Name) + "\', 0, \'" + strProtected + "\'," +
|
||||||
ConnectionsFileInfo.ConnectionFileVersion.ToString(CultureInfo.InvariantCulture) + ")",
|
ConnectionsFileInfo.ConnectionFileVersion.ToString(CultureInfo.InvariantCulture) + ")");
|
||||||
sqlDatabaseConnector.SqlConnection);
|
cmd.ExecuteNonQuery();
|
||||||
sqlQuery.ExecuteNonQuery();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace mRemoteNG.Config.Serializers
|
|||||||
var connectionInfo = new ConnectionInfo();
|
var connectionInfo = new ConnectionInfo();
|
||||||
foreach (var line in rdcFileContent.Split(Environment.NewLine.ToCharArray()))
|
foreach (var line in rdcFileContent.Split(Environment.NewLine.ToCharArray()))
|
||||||
{
|
{
|
||||||
var parts = line.Split(new[] {':'}, 3);
|
var parts = line.Split(new[] { ':' }, 3);
|
||||||
if (parts.Length < 3)
|
if (parts.Length < 3)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -75,7 +75,6 @@ namespace mRemoteNG.Config.Serializers
|
|||||||
connectionInfo.Colors = RdpProtocol.RDPColors.Colors32Bit;
|
connectionInfo.Colors = RdpProtocol.RDPColors.Colors32Bit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "bitmapcachepersistenable":
|
case "bitmapcachepersistenable":
|
||||||
connectionInfo.CacheBitmaps = value == "1";
|
connectionInfo.CacheBitmaps = value == "1";
|
||||||
@@ -128,11 +127,27 @@ namespace mRemoteNG.Config.Serializers
|
|||||||
connectionInfo.RedirectSound = RdpProtocol.RDPSounds.DoNotPlay;
|
connectionInfo.RedirectSound = RdpProtocol.RDPSounds.DoNotPlay;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "loadbalanceinfo":
|
case "loadbalanceinfo":
|
||||||
connectionInfo.LoadBalanceInfo = value;
|
connectionInfo.LoadBalanceInfo = value;
|
||||||
break;
|
break;
|
||||||
|
case "gatewayusagemethod":
|
||||||
|
switch (value)
|
||||||
|
{
|
||||||
|
case "0":
|
||||||
|
connectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Never;
|
||||||
|
break;
|
||||||
|
case "1":
|
||||||
|
connectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Always;
|
||||||
|
break;
|
||||||
|
case "2":
|
||||||
|
connectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Detect;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "gatewayhostname":
|
||||||
|
connectionInfo.RDGatewayHostname = value;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
|||||||
{
|
{
|
||||||
public class SqlDatabaseVersionVerifier
|
public class SqlDatabaseVersionVerifier
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlDatabaseConnector;
|
private readonly IDatabaseConnector _databaseConnector;
|
||||||
|
|
||||||
public SqlDatabaseVersionVerifier(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlDatabaseVersionVerifier(IDatabaseConnector DatabaseConnector)
|
||||||
{
|
{
|
||||||
if (sqlDatabaseConnector == null)
|
if (DatabaseConnector == null)
|
||||||
throw new ArgumentNullException(nameof(sqlDatabaseConnector));
|
throw new ArgumentNullException(nameof(DatabaseConnector));
|
||||||
|
|
||||||
_sqlDatabaseConnector = sqlDatabaseConnector;
|
_databaseConnector = DatabaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool VerifyDatabaseVersion(Version dbVersion)
|
public bool VerifyDatabaseVersion(Version dbVersion)
|
||||||
@@ -32,11 +32,11 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
|||||||
|
|
||||||
var dbUpgraders = new IVersionUpgrader[]
|
var dbUpgraders = new IVersionUpgrader[]
|
||||||
{
|
{
|
||||||
new SqlVersion22To23Upgrader(_sqlDatabaseConnector),
|
new SqlVersion22To23Upgrader(_databaseConnector),
|
||||||
new SqlVersion23To24Upgrader(_sqlDatabaseConnector),
|
new SqlVersion23To24Upgrader(_databaseConnector),
|
||||||
new SqlVersion24To25Upgrader(_sqlDatabaseConnector),
|
new SqlVersion24To25Upgrader(_databaseConnector),
|
||||||
new SqlVersion25To26Upgrader(_sqlDatabaseConnector),
|
new SqlVersion25To26Upgrader(_databaseConnector),
|
||||||
new SqlVersion26To27Upgrader(_sqlDatabaseConnector),
|
new SqlVersion26To27Upgrader(_databaseConnector),
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var upgrader in dbUpgraders)
|
foreach (var upgrader in dbUpgraders)
|
||||||
|
|||||||
@@ -2,20 +2,19 @@
|
|||||||
using mRemoteNG.Config.DatabaseConnectors;
|
using mRemoteNG.Config.DatabaseConnectors;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace mRemoteNG.Config.Serializers.Versioning
|
namespace mRemoteNG.Config.Serializers.Versioning
|
||||||
{
|
{
|
||||||
public class SqlVersion22To23Upgrader : IVersionUpgrader
|
public class SqlVersion22To23Upgrader : IVersionUpgrader
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlDatabaseConnector;
|
private readonly IDatabaseConnector _databaseConnector;
|
||||||
|
|
||||||
public SqlVersion22To23Upgrader(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlVersion22To23Upgrader(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
if (sqlDatabaseConnector == null)
|
if (databaseConnector == null)
|
||||||
throw new ArgumentNullException(nameof(sqlDatabaseConnector));
|
throw new ArgumentNullException(nameof(databaseConnector));
|
||||||
|
|
||||||
_sqlDatabaseConnector = sqlDatabaseConnector;
|
_databaseConnector = databaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanUpgrade(Version currentVersion)
|
public bool CanUpgrade(Version currentVersion)
|
||||||
@@ -33,8 +32,8 @@ ADD EnableFontSmoothing bit NOT NULL DEFAULT 0,
|
|||||||
EnableDesktopComposition bit NOT NULL DEFAULT 0,
|
EnableDesktopComposition bit NOT NULL DEFAULT 0,
|
||||||
InheritEnableFontSmoothing bit NOT NULL DEFAULT 0,
|
InheritEnableFontSmoothing bit NOT NULL DEFAULT 0,
|
||||||
InheritEnableDesktopComposition bit NOT NULL DEFAULT 0;";
|
InheritEnableDesktopComposition bit NOT NULL DEFAULT 0;";
|
||||||
var sqlCommand = new SqlCommand(sqlText, _sqlDatabaseConnector.SqlConnection);
|
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||||
sqlCommand.ExecuteNonQuery();
|
dbCommand.ExecuteNonQuery();
|
||||||
|
|
||||||
return new Version(2, 3);
|
return new Version(2, 3);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,19 @@
|
|||||||
using mRemoteNG.Config.DatabaseConnectors;
|
using mRemoteNG.Config.DatabaseConnectors;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace mRemoteNG.Config.Serializers.Versioning
|
namespace mRemoteNG.Config.Serializers.Versioning
|
||||||
{
|
{
|
||||||
public class SqlVersion23To24Upgrader : IVersionUpgrader
|
public class SqlVersion23To24Upgrader : IVersionUpgrader
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlDatabaseConnector;
|
private readonly IDatabaseConnector _databaseConnector;
|
||||||
|
|
||||||
public SqlVersion23To24Upgrader(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlVersion23To24Upgrader(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
if (sqlDatabaseConnector == null)
|
if (databaseConnector == null)
|
||||||
throw new ArgumentNullException(nameof(sqlDatabaseConnector));
|
throw new ArgumentNullException(nameof(databaseConnector));
|
||||||
|
|
||||||
_sqlDatabaseConnector = sqlDatabaseConnector;
|
_databaseConnector = databaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanUpgrade(Version currentVersion)
|
public bool CanUpgrade(Version currentVersion)
|
||||||
@@ -31,8 +30,8 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
|||||||
ALTER TABLE tblCons
|
ALTER TABLE tblCons
|
||||||
ADD UseCredSsp bit NOT NULL DEFAULT 1,
|
ADD UseCredSsp bit NOT NULL DEFAULT 1,
|
||||||
InheritUseCredSsp bit NOT NULL DEFAULT 0;";
|
InheritUseCredSsp bit NOT NULL DEFAULT 0;";
|
||||||
var sqlCommand = new SqlCommand(sqlText, _sqlDatabaseConnector.SqlConnection);
|
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||||
sqlCommand.ExecuteNonQuery();
|
dbCommand.ExecuteNonQuery();
|
||||||
|
|
||||||
return new Version(2, 4);
|
return new Version(2, 4);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,19 @@
|
|||||||
using mRemoteNG.Config.DatabaseConnectors;
|
using mRemoteNG.Config.DatabaseConnectors;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace mRemoteNG.Config.Serializers.Versioning
|
namespace mRemoteNG.Config.Serializers.Versioning
|
||||||
{
|
{
|
||||||
public class SqlVersion24To25Upgrader : IVersionUpgrader
|
public class SqlVersion24To25Upgrader : IVersionUpgrader
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlDatabaseConnector;
|
private readonly IDatabaseConnector _databaseConnector;
|
||||||
|
|
||||||
public SqlVersion24To25Upgrader(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlVersion24To25Upgrader(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
if (sqlDatabaseConnector == null)
|
if (databaseConnector == null)
|
||||||
throw new ArgumentNullException(nameof(sqlDatabaseConnector));
|
throw new ArgumentNullException(nameof(databaseConnector));
|
||||||
|
|
||||||
_sqlDatabaseConnector = sqlDatabaseConnector;
|
_databaseConnector = databaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanUpgrade(Version currentVersion)
|
public bool CanUpgrade(Version currentVersion)
|
||||||
@@ -33,8 +32,8 @@ ADD LoadBalanceInfo varchar (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
|
|||||||
AutomaticResize bit NOT NULL DEFAULT 1,
|
AutomaticResize bit NOT NULL DEFAULT 1,
|
||||||
InheritLoadBalanceInfo bit NOT NULL DEFAULT 0,
|
InheritLoadBalanceInfo bit NOT NULL DEFAULT 0,
|
||||||
InheritAutomaticResize bit NOT NULL DEFAULT 0;";
|
InheritAutomaticResize bit NOT NULL DEFAULT 0;";
|
||||||
var sqlCommand = new SqlCommand(sqlText, _sqlDatabaseConnector.SqlConnection);
|
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||||
sqlCommand.ExecuteNonQuery();
|
dbCommand.ExecuteNonQuery();
|
||||||
|
|
||||||
return new Version(2, 5);
|
return new Version(2, 5);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,19 @@
|
|||||||
using mRemoteNG.Config.DatabaseConnectors;
|
using mRemoteNG.Config.DatabaseConnectors;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace mRemoteNG.Config.Serializers.Versioning
|
namespace mRemoteNG.Config.Serializers.Versioning
|
||||||
{
|
{
|
||||||
public class SqlVersion25To26Upgrader : IVersionUpgrader
|
public class SqlVersion25To26Upgrader : IVersionUpgrader
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlDatabaseConnector;
|
private readonly IDatabaseConnector _databaseConnector;
|
||||||
|
|
||||||
public SqlVersion25To26Upgrader(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlVersion25To26Upgrader(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
if (sqlDatabaseConnector == null)
|
if (databaseConnector == null)
|
||||||
throw new ArgumentNullException(nameof(sqlDatabaseConnector));
|
throw new ArgumentNullException(nameof(databaseConnector));
|
||||||
|
|
||||||
_sqlDatabaseConnector = sqlDatabaseConnector;
|
_databaseConnector = databaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanUpgrade(Version currentVersion)
|
public bool CanUpgrade(Version currentVersion)
|
||||||
@@ -37,8 +36,8 @@ ADD RDPMinutesToIdleTimeout int NOT NULL DEFAULT 0,
|
|||||||
InheritSoundQuality bit NOT NULL DEFAULT 0;
|
InheritSoundQuality bit NOT NULL DEFAULT 0;
|
||||||
UPDATE tblRoot
|
UPDATE tblRoot
|
||||||
SET ConfVersion='2.6'";
|
SET ConfVersion='2.6'";
|
||||||
var sqlCommand = new SqlCommand(sqlText, _sqlDatabaseConnector.SqlConnection);
|
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||||
sqlCommand.ExecuteNonQuery();
|
dbCommand.ExecuteNonQuery();
|
||||||
|
|
||||||
return new Version(2, 6);
|
return new Version(2, 6);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,19 @@
|
|||||||
using mRemoteNG.Config.DatabaseConnectors;
|
using mRemoteNG.Config.DatabaseConnectors;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Data.SqlClient;
|
|
||||||
|
|
||||||
namespace mRemoteNG.Config.Serializers.Versioning
|
namespace mRemoteNG.Config.Serializers.Versioning
|
||||||
{
|
{
|
||||||
public class SqlVersion26To27Upgrader : IVersionUpgrader
|
public class SqlVersion26To27Upgrader : IVersionUpgrader
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnector _sqlDatabaseConnector;
|
private readonly IDatabaseConnector _databaseConnector;
|
||||||
|
|
||||||
public SqlVersion26To27Upgrader(SqlDatabaseConnector sqlDatabaseConnector)
|
public SqlVersion26To27Upgrader(IDatabaseConnector databaseConnector)
|
||||||
{
|
{
|
||||||
if (sqlDatabaseConnector == null)
|
if (databaseConnector == null)
|
||||||
throw new ArgumentNullException(nameof(sqlDatabaseConnector));
|
throw new ArgumentNullException(nameof(databaseConnector));
|
||||||
|
|
||||||
_sqlDatabaseConnector = sqlDatabaseConnector;
|
_databaseConnector = databaseConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanUpgrade(Version currentVersion)
|
public bool CanUpgrade(Version currentVersion)
|
||||||
@@ -33,8 +32,8 @@ ADD RedirectClipboard bit NOT NULL DEFAULT 0,
|
|||||||
InheritRedirectClipboard bit NOT NULL DEFAULT 0;
|
InheritRedirectClipboard bit NOT NULL DEFAULT 0;
|
||||||
UPDATE tblRoot
|
UPDATE tblRoot
|
||||||
SET ConfVersion='2.7'";
|
SET ConfVersion='2.7'";
|
||||||
var sqlCommand = new SqlCommand(sqlText, _sqlDatabaseConnector.SqlConnection);
|
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||||
sqlCommand.ExecuteNonQuery();
|
dbCommand.ExecuteNonQuery();
|
||||||
|
|
||||||
return new Version(2, 7);
|
return new Version(2, 7);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
using mRemoteNG.App;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using mRemoteNG.App;
|
||||||
using mRemoteNG.Connection.Protocol;
|
using mRemoteNG.Connection.Protocol;
|
||||||
using mRemoteNG.Connection.Protocol.Http;
|
using mRemoteNG.Connection.Protocol.Http;
|
||||||
using mRemoteNG.Connection.Protocol.ICA;
|
using mRemoteNG.Connection.Protocol.ICA;
|
||||||
@@ -10,11 +15,6 @@ using mRemoteNG.Connection.Protocol.Telnet;
|
|||||||
using mRemoteNG.Connection.Protocol.VNC;
|
using mRemoteNG.Connection.Protocol.VNC;
|
||||||
using mRemoteNG.Container;
|
using mRemoteNG.Container;
|
||||||
using mRemoteNG.Tree;
|
using mRemoteNG.Tree;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
|
|
||||||
namespace mRemoteNG.Connection
|
namespace mRemoteNG.Connection
|
||||||
@@ -163,7 +163,8 @@ namespace mRemoteNG.Connection
|
|||||||
DoNotJump = 4,
|
DoNotJump = 4,
|
||||||
OverridePanel = 8,
|
OverridePanel = 8,
|
||||||
DontUseConsoleSession = 16,
|
DontUseConsoleSession = 16,
|
||||||
NoCredentials = 32
|
NoCredentials = 32,
|
||||||
|
ViewOnly = 64
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
20
mRemoteV1/Connection/Protocol/ISupportsViewOnly.cs
Normal file
20
mRemoteV1/Connection/Protocol/ISupportsViewOnly.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
namespace mRemoteNG.Connection.Protocol
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Signifies that a protocol supports View Only mode. When in View Only mode,
|
||||||
|
/// the control will not capture and send input events to the remote host.
|
||||||
|
/// </summary>
|
||||||
|
public interface ISupportsViewOnly
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Whether this control is in view only mode.
|
||||||
|
/// </summary>
|
||||||
|
bool ViewOnly { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggles whether the control will capture and send input events to the remote host.
|
||||||
|
/// The local host will continue to receive data from the remote host regardless of this setting.
|
||||||
|
/// </summary>
|
||||||
|
void ToggleViewOnly();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Forms;
|
||||||
using AxMSTSCLib;
|
using AxMSTSCLib;
|
||||||
using mRemoteNG.App;
|
using mRemoteNG.App;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
@@ -6,16 +12,10 @@ using mRemoteNG.Tools;
|
|||||||
using mRemoteNG.UI;
|
using mRemoteNG.UI;
|
||||||
using mRemoteNG.UI.Forms;
|
using mRemoteNG.UI.Forms;
|
||||||
using MSTSCLib;
|
using MSTSCLib;
|
||||||
using System;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace mRemoteNG.Connection.Protocol.RDP
|
namespace mRemoteNG.Connection.Protocol.RDP
|
||||||
{
|
{
|
||||||
public class RdpProtocol : ProtocolBase
|
public class RdpProtocol : ProtocolBase, ISupportsViewOnly
|
||||||
{
|
{
|
||||||
/* RDP v8 requires Windows 7 with:
|
/* RDP v8 requires Windows 7 with:
|
||||||
* https://support.microsoft.com/en-us/kb/2592687
|
* https://support.microsoft.com/en-us/kb/2592687
|
||||||
@@ -24,6 +24,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
|||||||
*
|
*
|
||||||
* Windows 8+ support RDP v8 out of the box.
|
* Windows 8+ support RDP v8 out of the box.
|
||||||
*/
|
*/
|
||||||
|
private AxHost _axHost;
|
||||||
private MsRdpClient8NotSafeForScripting _rdpClient;
|
private MsRdpClient8NotSafeForScripting _rdpClient;
|
||||||
private Version _rdpVersion;
|
private Version _rdpVersion;
|
||||||
private ConnectionInfo _connectionInfo;
|
private ConnectionInfo _connectionInfo;
|
||||||
@@ -86,6 +87,12 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
|||||||
|
|
||||||
public bool LoadBalanceInfoUseUtf8 { get; set; }
|
public bool LoadBalanceInfoUseUtf8 { get; set; }
|
||||||
|
|
||||||
|
public bool ViewOnly
|
||||||
|
{
|
||||||
|
get => !_axHost.Enabled;
|
||||||
|
set => _axHost.Enabled = !value;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
@@ -116,7 +123,8 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
|||||||
Application.DoEvents();
|
Application.DoEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
_rdpClient = (MsRdpClient8NotSafeForScripting)((AxMsRdpClient8NotSafeForScripting)Control).GetOcx();
|
_axHost = (AxMsRdpClient8NotSafeForScripting)Control;
|
||||||
|
_rdpClient = (MsRdpClient8NotSafeForScripting)_axHost.GetOcx();
|
||||||
}
|
}
|
||||||
catch (System.Runtime.InteropServices.COMException ex)
|
catch (System.Runtime.InteropServices.COMException ex)
|
||||||
{
|
{
|
||||||
@@ -160,6 +168,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
|||||||
SetAuthenticationLevel();
|
SetAuthenticationLevel();
|
||||||
SetLoadBalanceInfo();
|
SetLoadBalanceInfo();
|
||||||
SetRdGateway();
|
SetRdGateway();
|
||||||
|
ViewOnly = Force.HasFlag(ConnectionInfo.Force.ViewOnly);
|
||||||
|
|
||||||
_rdpClient.ColorDepth = (int)_connectionInfo.Colors;
|
_rdpClient.ColorDepth = (int)_connectionInfo.Colors;
|
||||||
|
|
||||||
@@ -187,6 +196,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
|||||||
{
|
{
|
||||||
_rdpClient.Connect();
|
_rdpClient.Connect();
|
||||||
base.Connect();
|
base.Connect();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -234,6 +244,22 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggles whether the RDP ActiveX control will capture and send input events to the remote host.
|
||||||
|
/// The local host will continue to receive data from the remote host regardless of this setting.
|
||||||
|
/// </summary>
|
||||||
|
public void ToggleViewOnly()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ViewOnly = !ViewOnly;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, $"Could not toggle view only mode for host {_connectionInfo.Hostname}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void Focus()
|
public override void Focus()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
using mRemoteNG.App;
|
using mRemoteNG.App;
|
||||||
using mRemoteNG.Tools;
|
using mRemoteNG.Tools;
|
||||||
using mRemoteNG.UI.Forms;
|
using mRemoteNG.UI.Forms;
|
||||||
using System;
|
|
||||||
using System.ComponentModel;
|
|
||||||
|
|
||||||
// ReSharper disable ArrangeAccessorOwnerBody
|
// ReSharper disable ArrangeAccessorOwnerBody
|
||||||
|
|
||||||
|
|
||||||
namespace mRemoteNG.Connection.Protocol.VNC
|
namespace mRemoteNG.Connection.Protocol.VNC
|
||||||
{
|
{
|
||||||
public class ProtocolVNC : ProtocolBase
|
public class ProtocolVNC : ProtocolBase, ISupportsViewOnly
|
||||||
{
|
{
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
|
|||||||
12
mRemoteV1/Properties/Settings.Designer.cs
generated
12
mRemoteV1/Properties/Settings.Designer.cs
generated
@@ -2817,6 +2817,18 @@ namespace mRemoteNG {
|
|||||||
set {
|
set {
|
||||||
this["InhDefaultFavorite"] = value;
|
this["InhDefaultFavorite"] = value;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("mssql")]
|
||||||
|
public string SQLServerType {
|
||||||
|
get {
|
||||||
|
return ((string)(this["SQLServerType"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["SQLServerType"] = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -701,5 +701,8 @@
|
|||||||
<Setting Name="InhDefaultFavorite" Type="System.Boolean" Scope="User">
|
<Setting Name="InhDefaultFavorite" Type="System.Boolean" Scope="User">
|
||||||
<Value Profile="(Default)">False</Value>
|
<Value Profile="(Default)">False</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
|
<Setting Name="SQLServerType" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)">mssql</Value>
|
||||||
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -128,7 +128,9 @@ CREATE TABLE [dbo].[tblCons] (
|
|||||||
[LoadBalanceInfo] [varchar] (1024) NULL ,
|
[LoadBalanceInfo] [varchar] (1024) NULL ,
|
||||||
[AutomaticResize] [bit] NOT NULL DEFAULT 1 ,
|
[AutomaticResize] [bit] NOT NULL DEFAULT 1 ,
|
||||||
[InheritLoadBalanceInfo] [bit] NOT NULL DEFAULT 0 ,
|
[InheritLoadBalanceInfo] [bit] NOT NULL DEFAULT 0 ,
|
||||||
[InheritAutomaticResize] [bit] NOT NULL DEFAULT 0
|
[InheritAutomaticResize] [bit] NOT NULL DEFAULT 0 ,
|
||||||
|
[RedirectClipboard] [bit] NOT NULL DEFAULT 0 ,
|
||||||
|
[InheritRedirectClipboard] [bit] NOT NULL DEFAULT 0
|
||||||
) ON [PRIMARY]
|
) ON [PRIMARY]
|
||||||
GO
|
GO
|
||||||
|
|
||||||
181
mRemoteV1/Resources/Help/MySQLScript.txt
Normal file
181
mRemoteV1/Resources/Help/MySQLScript.txt
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8 */;
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tblCons`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `tblCons`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `tblCons` (
|
||||||
|
`ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ConstantID` varchar(128) DEFAULT NULL,
|
||||||
|
`PositionID` int(11) NOT NULL,
|
||||||
|
`ParentID` varchar(128) DEFAULT NULL,
|
||||||
|
`LastChange` datetime NOT NULL,
|
||||||
|
`Name` varchar(128) NOT NULL,
|
||||||
|
`Type` varchar(32) NOT NULL,
|
||||||
|
`Expanded` tinyint(1) NOT NULL,
|
||||||
|
`Description` varchar(1024) DEFAULT NULL,
|
||||||
|
`Icon` varchar(128) NOT NULL,
|
||||||
|
`Panel` varchar(128) NOT NULL,
|
||||||
|
`Username` varchar(512) DEFAULT NULL,
|
||||||
|
`DomainName` varchar(512) DEFAULT NULL,
|
||||||
|
`Password` varchar(1024) DEFAULT NULL,
|
||||||
|
`Hostname` varchar(512) DEFAULT NULL,
|
||||||
|
`Protocol` varchar(32) NOT NULL,
|
||||||
|
`PuttySession` varchar(128) DEFAULT NULL,
|
||||||
|
`Port` int(11) NOT NULL,
|
||||||
|
`ConnectToConsole` tinyint(1) NOT NULL,
|
||||||
|
`UseCredSsp` tinyint(1) NOT NULL,
|
||||||
|
`RenderingEngine` varchar(10) DEFAULT NULL,
|
||||||
|
`ICAEncryptionStrength` varchar(32) NOT NULL,
|
||||||
|
`RDPAuthenticationLevel` varchar(32) NOT NULL,
|
||||||
|
`RDPMinutesToIdleTimeout` int(11) NOT NULL,
|
||||||
|
`RDPAlertIdleTimeout` tinyint(1) NOT NULL,
|
||||||
|
`Colors` varchar(32) NOT NULL,
|
||||||
|
`Resolution` varchar(32) NOT NULL,
|
||||||
|
`DisplayWallpaper` tinyint(1) NOT NULL,
|
||||||
|
`DisplayThemes` tinyint(1) NOT NULL,
|
||||||
|
`EnableFontSmoothing` tinyint(1) NOT NULL,
|
||||||
|
`EnableDesktopComposition` tinyint(1) NOT NULL,
|
||||||
|
`CacheBitmaps` tinyint(1) NOT NULL,
|
||||||
|
`RedirectDiskDrives` tinyint(1) NOT NULL,
|
||||||
|
`RedirectPorts` tinyint(1) NOT NULL,
|
||||||
|
`RedirectPrinters` tinyint(1) NOT NULL,
|
||||||
|
`RedirectSmartCards` tinyint(1) NOT NULL,
|
||||||
|
`RedirectSound` varchar(64) NOT NULL,
|
||||||
|
`SoundQuality` varchar(20) NOT NULL,
|
||||||
|
`RedirectKeys` tinyint(1) NOT NULL,
|
||||||
|
`Connected` tinyint(1) NOT NULL,
|
||||||
|
`PreExtApp` varchar(256) DEFAULT NULL,
|
||||||
|
`PostExtApp` varchar(256) DEFAULT NULL,
|
||||||
|
`MacAddress` varchar(32) DEFAULT NULL,
|
||||||
|
`UserField` varchar(256) DEFAULT NULL,
|
||||||
|
`ExtApp` varchar(256) DEFAULT NULL,
|
||||||
|
`VNCCompression` varchar(10) DEFAULT NULL,
|
||||||
|
`VNCEncoding` varchar(20) DEFAULT NULL,
|
||||||
|
`VNCAuthMode` varchar(10) DEFAULT NULL,
|
||||||
|
`VNCProxyType` varchar(20) DEFAULT NULL,
|
||||||
|
`VNCProxyIP` varchar(128) DEFAULT NULL,
|
||||||
|
`VNCProxyPort` int(11) DEFAULT NULL,
|
||||||
|
`VNCProxyUsername` varchar(512) DEFAULT NULL,
|
||||||
|
`VNCProxyPassword` varchar(1024) DEFAULT NULL,
|
||||||
|
`VNCColors` varchar(10) DEFAULT NULL,
|
||||||
|
`VNCSmartSizeMode` varchar(20) DEFAULT NULL,
|
||||||
|
`VNCViewOnly` tinyint(1) NOT NULL,
|
||||||
|
`RDGatewayUsageMethod` varchar(32) NOT NULL,
|
||||||
|
`RDGatewayHostname` varchar(512) DEFAULT NULL,
|
||||||
|
`RDGatewayUseConnectionCredentials` varchar(32) NOT NULL,
|
||||||
|
`RDGatewayUsername` varchar(512) DEFAULT NULL,
|
||||||
|
`RDGatewayPassword` varchar(1024) DEFAULT NULL,
|
||||||
|
`RDGatewayDomain` varchar(512) DEFAULT NULL,
|
||||||
|
`InheritCacheBitmaps` tinyint(1) NOT NULL,
|
||||||
|
`InheritColors` tinyint(1) NOT NULL,
|
||||||
|
`InheritDescription` tinyint(1) NOT NULL,
|
||||||
|
`InheritDisplayThemes` tinyint(1) NOT NULL,
|
||||||
|
`InheritDisplayWallpaper` tinyint(1) NOT NULL,
|
||||||
|
`InheritEnableFontSmoothing` tinyint(1) NOT NULL,
|
||||||
|
`InheritEnableDesktopComposition` tinyint(1) NOT NULL,
|
||||||
|
`InheritDomain` tinyint(1) NOT NULL,
|
||||||
|
`InheritIcon` tinyint(1) NOT NULL,
|
||||||
|
`InheritPanel` tinyint(1) NOT NULL,
|
||||||
|
`InheritPassword` tinyint(1) NOT NULL,
|
||||||
|
`InheritPort` tinyint(1) NOT NULL,
|
||||||
|
`InheritProtocol` tinyint(1) NOT NULL,
|
||||||
|
`InheritPuttySession` tinyint(1) NOT NULL,
|
||||||
|
`InheritRedirectDiskDrives` tinyint(1) NOT NULL,
|
||||||
|
`InheritRedirectKeys` tinyint(1) NOT NULL,
|
||||||
|
`InheritRedirectPorts` tinyint(1) NOT NULL,
|
||||||
|
`InheritRedirectPrinters` tinyint(1) NOT NULL,
|
||||||
|
`InheritRedirectSmartCards` tinyint(1) NOT NULL,
|
||||||
|
`InheritRedirectSound` tinyint(1) NOT NULL,
|
||||||
|
`InheritSoundQuality` tinyint(1) NOT NULL,
|
||||||
|
`InheritResolution` tinyint(1) NOT NULL,
|
||||||
|
`InheritUseConsoleSession` tinyint(1) NOT NULL,
|
||||||
|
`InheritUseCredSsp` tinyint(1) NOT NULL,
|
||||||
|
`InheritRenderingEngine` tinyint(1) NOT NULL,
|
||||||
|
`InheritICAEncryptionStrength` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDPAuthenticationLevel` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDPMinutesToIdleTimeout` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDPAlertIdleTimeout` tinyint(1) NOT NULL,
|
||||||
|
`InheritUsername` tinyint(1) NOT NULL,
|
||||||
|
`InheritPreExtApp` tinyint(1) NOT NULL,
|
||||||
|
`InheritPostExtApp` tinyint(1) NOT NULL,
|
||||||
|
`InheritMacAddress` tinyint(1) NOT NULL,
|
||||||
|
`InheritUserField` tinyint(1) NOT NULL,
|
||||||
|
`InheritExtApp` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCCompression` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCEncoding` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCAuthMode` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCProxyType` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCProxyIP` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCProxyPort` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCProxyUsername` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCProxyPassword` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCColors` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCSmartSizeMode` tinyint(1) NOT NULL,
|
||||||
|
`InheritVNCViewOnly` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDGatewayUsageMethod` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDGatewayHostname` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDGatewayUseConnectionCredentials` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDGatewayUsername` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDGatewayPassword` tinyint(1) NOT NULL,
|
||||||
|
`InheritRDGatewayDomain` tinyint(1) NOT NULL,
|
||||||
|
`LoadBalanceInfo` varchar(1024) DEFAULT NULL,
|
||||||
|
`AutomaticResize` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
`InheritLoadBalanceInfo` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`InheritAutomaticResize` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`RedirectClipboard` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`InheritRedirectClipboard` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`ID`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3324 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tblRoot`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `tblRoot`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `tblRoot` (
|
||||||
|
`Name` varchar(2048) NOT NULL,
|
||||||
|
`Export` tinyint(1) NOT NULL,
|
||||||
|
`Protected` varchar(4048) NOT NULL,
|
||||||
|
`ConfVersion` double NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tblUpdate`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `tblUpdate`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `tblUpdate` (
|
||||||
|
`LastUpdate` datetime(3) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html lang="en" dir="ltr">
|
<html lang="en" dir="ltr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>SSH File Transfer requires an SSH service to listen on an available network port (default 22) on a remote host.</li>
|
<li>SSH File Transfer requires an SSH service to listen on an available network port (default 22) on a remote host.</li>
|
||||||
<li>A username and password must be supplied to connect with the remote host.</li>
|
<li>A username and password must be supplied to connect with the remote host.</li>
|
||||||
<li>The remote host must have a writeable folder on its filesystem to place the transferred files.</li>
|
<li>The remote host must have a writable folder on its filesystem to place the transferred files.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<!-- Prerequisites - #end -->
|
<!-- Prerequisites - #end -->
|
||||||
<!-- Configuration - #start -->
|
<!-- Configuration - #start -->
|
||||||
@@ -62,6 +62,5 @@
|
|||||||
<b>[14] ERROR- SSH background transfer failed!</b>
|
<b>[14] ERROR- SSH background transfer failed!</b>
|
||||||
<br/>This issue was likely encountered due to a permissions issue. Ensure you have appropriate access to write to the specified Remote File.
|
<br/>This issue was likely encountered due to a permissions issue. Ensure you have appropriate access to write to the specified Remote File.
|
||||||
</div>
|
</div>
|
||||||
</p>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html lang="en" dir="ltr">
|
<html lang="en" dir="ltr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
@@ -46,11 +46,16 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="SQLScript.txt">Microsoft™ SQL script</a>
|
<a href="MSSQLScript.txt">Microsoft™ SQL script</a>
|
||||||
</td>
|
</td>
|
||||||
<td>Microsoft™ SQL Server</td>
|
<td>Microsoft™ SQL Server</td>
|
||||||
</tr>
|
</tr>
|
||||||
<!-- <tr><td><a href="MySQLScript.txt">MySQL™ script</a></td><td>MySQL™ Server</td></tr> -->
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="MySQLScript.txt">MySQL™ script</a>
|
||||||
|
</td>
|
||||||
|
<td>MySQL™ Server</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
20
mRemoteV1/Resources/Language/Language.Designer.cs
generated
20
mRemoteV1/Resources/Language/Language.Designer.cs
generated
@@ -78,6 +78,15 @@ namespace mRemoteNG {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Clear search string.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ClearSearchString {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ClearSearchString", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Create a New Connection File.
|
/// Looks up a localized string similar to Create a New Connection File.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -105,6 +114,15 @@ namespace mRemoteNG {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Connect in View Only mode.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ConnectInViewOnlyMode {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ConnectInViewOnlyMode", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to The connection file could not be found..
|
/// Looks up a localized string similar to The connection file could not be found..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -3984,7 +4002,7 @@ namespace mRemoteNG {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to View Only (VNC).
|
/// Looks up a localized string similar to View Only.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string strMenuViewOnly {
|
internal static string strMenuViewOnly {
|
||||||
get {
|
get {
|
||||||
|
|||||||
@@ -1082,7 +1082,7 @@ Starte mit neuer Datei.</value>
|
|||||||
<value>Text anzeigen</value>
|
<value>Text anzeigen</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMenuSmartSize" xml:space="preserve">
|
<data name="strMenuSmartSize" xml:space="preserve">
|
||||||
<value>SmartSize (RDP/VNC)</value>
|
<value>Smart-Size-Modus (RDP/VNC)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMenuSSHFileTransfer" xml:space="preserve">
|
<data name="strMenuSSHFileTransfer" xml:space="preserve">
|
||||||
<value>SSH-Dateiübertragung</value>
|
<value>SSH-Dateiübertragung</value>
|
||||||
@@ -1103,7 +1103,7 @@ Starte mit neuer Datei.</value>
|
|||||||
<value>&Ansicht</value>
|
<value>&Ansicht</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMenuViewOnly" xml:space="preserve">
|
<data name="strMenuViewOnly" xml:space="preserve">
|
||||||
<value>Nur Ansicht (VNC)</value>
|
<value>View-Only-Modus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMenuWebsite" xml:space="preserve">
|
<data name="strMenuWebsite" xml:space="preserve">
|
||||||
<value>Webseite</value>
|
<value>Webseite</value>
|
||||||
@@ -1157,7 +1157,7 @@ Starte mit neuer Datei.</value>
|
|||||||
<value>Normal</value>
|
<value>Normal</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strNoSmartSize" xml:space="preserve">
|
<data name="strNoSmartSize" xml:space="preserve">
|
||||||
<value>Keine automatische Größenanpassung (SmartSize)</value>
|
<value>Keine automatische Größenanpassung (Smart-Size)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strNoUpdateAvailable" xml:space="preserve">
|
<data name="strNoUpdateAvailable" xml:space="preserve">
|
||||||
<value>Keine Updates verfügbar</value>
|
<value>Keine Updates verfügbar</value>
|
||||||
@@ -1467,7 +1467,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungsdatei erstell
|
|||||||
<value>Auflösung</value>
|
<value>Auflösung</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strPropertyNameSmartSizeMode" xml:space="preserve">
|
<data name="strPropertyNameSmartSizeMode" xml:space="preserve">
|
||||||
<value>SmartSize-Modus</value>
|
<value>Smart-Size-Modus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
|
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
|
||||||
<value>Verwende Konsole</value>
|
<value>Verwende Konsole</value>
|
||||||
@@ -2660,4 +2660,10 @@ Development umfasst Alphas, Betas und Release Candidates.</value>
|
|||||||
<data name="Favorites" xml:space="preserve">
|
<data name="Favorites" xml:space="preserve">
|
||||||
<value>Favoriten</value>
|
<value>Favoriten</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ClearSearchString" xml:space="preserve">
|
||||||
|
<value>Suchbegriff löschen</value>
|
||||||
|
</data>
|
||||||
|
<data name="ConnectInViewOnlyMode" xml:space="preserve">
|
||||||
|
<value>Im View-Only-Modus verbinden</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1220,7 +1220,7 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
|||||||
<value>&View</value>
|
<value>&View</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMenuViewOnly" xml:space="preserve">
|
<data name="strMenuViewOnly" xml:space="preserve">
|
||||||
<value>View Only (VNC)</value>
|
<value>View Only</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMenuWebsite" xml:space="preserve">
|
<data name="strMenuWebsite" xml:space="preserve">
|
||||||
<value>Website</value>
|
<value>Website</value>
|
||||||
@@ -2761,11 +2761,11 @@ Development Channel includes Alphas, Betas & Release Candidates.</value>
|
|||||||
<value>Proxy</value>
|
<value>Proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMultiSSH" xml:space="preserve">
|
<data name="strMultiSSH" xml:space="preserve">
|
||||||
<value>Multi SSH:</value>
|
<value>Multi SSH:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strMultiSSHToolTip" xml:space="preserve">
|
<data name="strMultiSSHToolTip" xml:space="preserve">
|
||||||
<value>Press ENTER to send. Ctrl+C is sent immediately.</value>
|
<value>Press ENTER to send. Ctrl+C is sent immediately.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="strPropertyDescriptionFavorite" xml:space="preserve">
|
<data name="strPropertyDescriptionFavorite" xml:space="preserve">
|
||||||
<value>Show this connection in the favorites menu.</value>
|
<value>Show this connection in the favorites menu.</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -2775,4 +2775,10 @@ Development Channel includes Alphas, Betas & Release Candidates.</value>
|
|||||||
<data name="Favorites" xml:space="preserve">
|
<data name="Favorites" xml:space="preserve">
|
||||||
<value>Favorites</value>
|
<value>Favorites</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ClearSearchString" xml:space="preserve">
|
||||||
|
<value>Clear search string</value>
|
||||||
|
</data>
|
||||||
|
<data name="ConnectInViewOnlyMode" xml:space="preserve">
|
||||||
|
<value>Connect in View Only mode</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -2705,4 +2705,4 @@ mRemoteNG 将退出并安装更新。</value>
|
|||||||
<data name="Favorites" xml:space="preserve">
|
<data name="Favorites" xml:space="preserve">
|
||||||
<value>收藏夹</value>
|
<value>收藏夹</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Binary file not shown.
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Data.SqlTypes;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@@ -8,6 +9,7 @@ using System.Security;
|
|||||||
using mRemoteNG.App;
|
using mRemoteNG.App;
|
||||||
using mRemoteNG.Messages;
|
using mRemoteNG.Messages;
|
||||||
using mRemoteNG.UI.Forms;
|
using mRemoteNG.UI.Forms;
|
||||||
|
using MySql.Data.Types;
|
||||||
using static System.String;
|
using static System.String;
|
||||||
|
|
||||||
namespace mRemoteNG.Tools
|
namespace mRemoteNG.Tools
|
||||||
@@ -66,13 +68,40 @@ namespace mRemoteNG.Tools
|
|||||||
|
|
||||||
|
|
||||||
public static string DBDate(DateTime Dt)
|
public static string DBDate(DateTime Dt)
|
||||||
{
|
{
|
||||||
var strDate = Dt.Year + LeadingZero(Convert.ToString(Dt.Month)) + LeadingZero(Convert.ToString(Dt.Day)) +
|
switch (Settings.Default.SQLServerType)
|
||||||
" " + LeadingZero(Convert.ToString(Dt.Hour)) + ":" +
|
{
|
||||||
LeadingZero(Convert.ToString(Dt.Minute)) + ":" + LeadingZero(Convert.ToString(Dt.Second));
|
case "mysql":
|
||||||
return strDate;
|
return Dt.ToString("yyyy/MM/dd HH:mm:ss");
|
||||||
}
|
case "mssql":
|
||||||
|
default:
|
||||||
|
return Dt.ToString("yyyyMMdd HH:mm:ss");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Type DBTimeStampType()
|
||||||
|
{
|
||||||
|
switch (Settings.Default.SQLServerType)
|
||||||
|
{
|
||||||
|
case "mysql":
|
||||||
|
return typeof(MySqlDateTime);
|
||||||
|
case "mssql":
|
||||||
|
default:
|
||||||
|
return typeof(SqlDateTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object DBTimeStampNow()
|
||||||
|
{
|
||||||
|
switch (Settings.Default.SQLServerType)
|
||||||
|
{
|
||||||
|
case "mysql":
|
||||||
|
return new MySqlDateTime(DateTime.Now);
|
||||||
|
case "mssql":
|
||||||
|
default:
|
||||||
|
return (SqlDateTime)DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static string PrepareValueForDB(string Text)
|
public static string PrepareValueForDB(string Text)
|
||||||
{
|
{
|
||||||
|
|||||||
65
mRemoteV1/UI/Controls/Base/NGSearchBox.cs
Normal file
65
mRemoteV1/UI/Controls/Base/NGSearchBox.cs
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace mRemoteNG.UI.Controls.Base
|
||||||
|
{
|
||||||
|
public class NGSearchBox : NGTextBox
|
||||||
|
{
|
||||||
|
private PictureBox pbClear = new PictureBox();
|
||||||
|
private ToolTip btClearToolTip = new ToolTip();
|
||||||
|
|
||||||
|
public NGSearchBox()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
LostFocus += FocusLost;
|
||||||
|
GotFocus += FocusGot;
|
||||||
|
AddClearButton();
|
||||||
|
ApplyLanguage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyLanguage()
|
||||||
|
{
|
||||||
|
btClearToolTip.SetToolTip(pbClear, Language.ClearSearchString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddClearButton()
|
||||||
|
{
|
||||||
|
pbClear.Image = Resources.Delete;
|
||||||
|
pbClear.Width = 20;
|
||||||
|
pbClear.Dock = DockStyle.Right;
|
||||||
|
pbClear.Cursor = Cursors.Default;
|
||||||
|
pbClear.Click += PbClear_Click;
|
||||||
|
pbClear.LostFocus += FocusLost;
|
||||||
|
Controls.Add(pbClear);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FocusLost(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Text))
|
||||||
|
{
|
||||||
|
Text = Language.strSearchPrompt;
|
||||||
|
pbClear.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FocusGot(object sender, EventArgs e) => Text = "";
|
||||||
|
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// NGSearchBox
|
||||||
|
//
|
||||||
|
this.TextChanged += new System.EventHandler(this.NGSearchBox_TextChanged);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PbClear_Click(object sender, EventArgs e) => Text = string.Empty;
|
||||||
|
|
||||||
|
private void NGSearchBox_TextChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
pbClear.Visible = Text == Language.strSearchPrompt ? false : TextLength > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
123
mRemoteV1/UI/Controls/Base/NGSearchBox.resx
Normal file
123
mRemoteV1/UI/Controls/Base/NGSearchBox.resx
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<?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="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
||||||
@@ -26,6 +26,7 @@ namespace mRemoteNG.UI.Controls
|
|||||||
private ToolStripMenuItem _cMenTreeConnectWithOptionsConnectToConsoleSession;
|
private ToolStripMenuItem _cMenTreeConnectWithOptionsConnectToConsoleSession;
|
||||||
private ToolStripMenuItem _cMenTreeConnectWithOptionsNoCredentials;
|
private ToolStripMenuItem _cMenTreeConnectWithOptionsNoCredentials;
|
||||||
private ToolStripMenuItem _cMenTreeConnectWithOptionsConnectInFullscreen;
|
private ToolStripMenuItem _cMenTreeConnectWithOptionsConnectInFullscreen;
|
||||||
|
private ToolStripMenuItem _cMenTreeConnectWithOptionsViewOnly;
|
||||||
private ToolStripMenuItem _cMenTreeDisconnect;
|
private ToolStripMenuItem _cMenTreeDisconnect;
|
||||||
private ToolStripSeparator _cMenTreeSep2;
|
private ToolStripSeparator _cMenTreeSep2;
|
||||||
private ToolStripMenuItem _cMenTreeToolsTransferFile;
|
private ToolStripMenuItem _cMenTreeToolsTransferFile;
|
||||||
@@ -82,6 +83,7 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeConnectWithOptionsConnectInFullscreen = new ToolStripMenuItem();
|
_cMenTreeConnectWithOptionsConnectInFullscreen = new ToolStripMenuItem();
|
||||||
_cMenTreeConnectWithOptionsNoCredentials = new ToolStripMenuItem();
|
_cMenTreeConnectWithOptionsNoCredentials = new ToolStripMenuItem();
|
||||||
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting = new ToolStripMenuItem();
|
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting = new ToolStripMenuItem();
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly = new ToolStripMenuItem();
|
||||||
_cMenTreeDisconnect = new ToolStripMenuItem();
|
_cMenTreeDisconnect = new ToolStripMenuItem();
|
||||||
_cMenTreeSep1 = new ToolStripSeparator();
|
_cMenTreeSep1 = new ToolStripSeparator();
|
||||||
_cMenTreeToolsExternalApps = new ToolStripMenuItem();
|
_cMenTreeToolsExternalApps = new ToolStripMenuItem();
|
||||||
@@ -157,7 +159,8 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeConnectWithOptionsDontConnectToConsoleSession,
|
_cMenTreeConnectWithOptionsDontConnectToConsoleSession,
|
||||||
_cMenTreeConnectWithOptionsConnectInFullscreen,
|
_cMenTreeConnectWithOptionsConnectInFullscreen,
|
||||||
_cMenTreeConnectWithOptionsNoCredentials,
|
_cMenTreeConnectWithOptionsNoCredentials,
|
||||||
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting
|
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting,
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly
|
||||||
});
|
});
|
||||||
_cMenTreeConnectWithOptions.Name = "_cMenTreeConnectWithOptions";
|
_cMenTreeConnectWithOptions.Name = "_cMenTreeConnectWithOptions";
|
||||||
_cMenTreeConnectWithOptions.Size = new System.Drawing.Size(199, 22);
|
_cMenTreeConnectWithOptions.Size = new System.Drawing.Size(199, 22);
|
||||||
@@ -207,6 +210,15 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = "Choose panel before connecting";
|
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = "Choose panel before connecting";
|
||||||
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Click += OnChoosePanelBeforeConnectingClicked;
|
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Click += OnChoosePanelBeforeConnectingClicked;
|
||||||
//
|
//
|
||||||
|
// cMenTreeConnectWithOptionsViewOnly
|
||||||
|
//
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Image = Resources.View;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Name =
|
||||||
|
"_cMenTreeConnectWithOptionsViewOnly";
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Size = new System.Drawing.Size(245, 22);
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Text = Language.ConnectInViewOnlyMode;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Click += ConnectWithOptionsViewOnlyOnClick;
|
||||||
|
//
|
||||||
// cMenTreeDisconnect
|
// cMenTreeDisconnect
|
||||||
//
|
//
|
||||||
_cMenTreeDisconnect.Image = Resources.Pause;
|
_cMenTreeDisconnect.Image = Resources.Pause;
|
||||||
@@ -396,6 +408,7 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeConnectWithOptionsConnectInFullscreen.Text = Language.strConnectInFullscreen;
|
_cMenTreeConnectWithOptionsConnectInFullscreen.Text = Language.strConnectInFullscreen;
|
||||||
_cMenTreeConnectWithOptionsNoCredentials.Text = Language.strConnectNoCredentials;
|
_cMenTreeConnectWithOptionsNoCredentials.Text = Language.strConnectNoCredentials;
|
||||||
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = Language.strChoosePanelBeforeConnecting;
|
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = Language.strChoosePanelBeforeConnecting;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Text = Language.ConnectInViewOnlyMode;
|
||||||
_cMenTreeDisconnect.Text = Language.strMenuDisconnect;
|
_cMenTreeDisconnect.Text = Language.strMenuDisconnect;
|
||||||
|
|
||||||
_cMenTreeToolsExternalApps.Text = Language.strMenuExternalTools;
|
_cMenTreeToolsExternalApps.Text = Language.strMenuExternalTools;
|
||||||
@@ -436,13 +449,13 @@ namespace mRemoteNG.UI.Controls
|
|||||||
{
|
{
|
||||||
ShowHideMenuItemsForRootConnectionNode();
|
ShowHideMenuItemsForRootConnectionNode();
|
||||||
}
|
}
|
||||||
else if (_connectionTree.SelectedNode is ContainerInfo)
|
else if (_connectionTree.SelectedNode is ContainerInfo containerInfo)
|
||||||
{
|
{
|
||||||
ShowHideMenuItemsForContainer(_connectionTree.SelectedNode);
|
ShowHideMenuItemsForContainer(containerInfo);
|
||||||
}
|
}
|
||||||
else if (_connectionTree.SelectedNode is PuttySessionInfo)
|
else if (_connectionTree.SelectedNode is PuttySessionInfo puttyNode)
|
||||||
{
|
{
|
||||||
ShowHideMenuItemsForPuttyNode(_connectionTree.SelectedNode);
|
ShowHideMenuItemsForPuttyNode(puttyNode);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -475,6 +488,7 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeDelete.Enabled = false;
|
_cMenTreeDelete.Enabled = false;
|
||||||
_cMenTreeMoveUp.Enabled = false;
|
_cMenTreeMoveUp.Enabled = false;
|
||||||
_cMenTreeMoveDown.Enabled = false;
|
_cMenTreeMoveDown.Enabled = false;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ShowHideMenuItemsForRootConnectionNode()
|
internal void ShowHideMenuItemsForRootConnectionNode()
|
||||||
@@ -491,22 +505,22 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeDelete.Enabled = false;
|
_cMenTreeDelete.Enabled = false;
|
||||||
_cMenTreeMoveUp.Enabled = false;
|
_cMenTreeMoveUp.Enabled = false;
|
||||||
_cMenTreeMoveDown.Enabled = false;
|
_cMenTreeMoveDown.Enabled = false;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ShowHideMenuItemsForContainer(ConnectionInfo connectionInfo)
|
internal void ShowHideMenuItemsForContainer(ContainerInfo containerInfo)
|
||||||
{
|
{
|
||||||
_cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false;
|
_cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false;
|
||||||
_cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false;
|
_cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false;
|
||||||
_cMenTreeDisconnect.Enabled = false;
|
|
||||||
|
|
||||||
var openConnections = ((ContainerInfo)connectionInfo).Children.Sum(child => child.OpenConnections.Count);
|
var hasOpenConnections = containerInfo.Children.Any(child => child.OpenConnections.Count > 0);
|
||||||
if (openConnections > 0)
|
_cMenTreeDisconnect.Enabled = hasOpenConnections;
|
||||||
_cMenTreeDisconnect.Enabled = true;
|
|
||||||
|
|
||||||
_cMenTreeToolsTransferFile.Enabled = false;
|
_cMenTreeToolsTransferFile.Enabled = false;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ShowHideMenuItemsForPuttyNode(ConnectionInfo connectionInfo)
|
internal void ShowHideMenuItemsForPuttyNode(PuttySessionInfo connectionInfo)
|
||||||
{
|
{
|
||||||
_cMenTreeAddConnection.Enabled = false;
|
_cMenTreeAddConnection.Enabled = false;
|
||||||
_cMenTreeAddFolder.Enabled = false;
|
_cMenTreeAddFolder.Enabled = false;
|
||||||
@@ -527,6 +541,7 @@ namespace mRemoteNG.UI.Controls
|
|||||||
_cMenTreeMoveDown.Enabled = false;
|
_cMenTreeMoveDown.Enabled = false;
|
||||||
_cMenTreeImport.Enabled = false;
|
_cMenTreeImport.Enabled = false;
|
||||||
_cMenTreeExportFile.Enabled = false;
|
_cMenTreeExportFile.Enabled = false;
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ShowHideMenuItemsForConnectionNode(ConnectionInfo connectionInfo)
|
internal void ShowHideMenuItemsForConnectionNode(ConnectionInfo connectionInfo)
|
||||||
@@ -545,6 +560,9 @@ namespace mRemoteNG.UI.Controls
|
|||||||
|
|
||||||
if (connectionInfo.Protocol == ProtocolType.IntApp)
|
if (connectionInfo.Protocol == ProtocolType.IntApp)
|
||||||
_cMenTreeConnectWithOptionsNoCredentials.Enabled = false;
|
_cMenTreeConnectWithOptionsNoCredentials.Enabled = false;
|
||||||
|
|
||||||
|
if (connectionInfo.Protocol != ProtocolType.RDP && connectionInfo.Protocol != ProtocolType.VNC)
|
||||||
|
_cMenTreeConnectWithOptionsViewOnly.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void DisableShortcutKeys()
|
internal void DisableShortcutKeys()
|
||||||
@@ -691,6 +709,13 @@ namespace mRemoteNG.UI.Controls
|
|||||||
ConnectionInfo.Force.DoNotJump);
|
ConnectionInfo.Force.DoNotJump);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ConnectWithOptionsViewOnlyOnClick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var connectionTarget = _connectionTree.SelectedNode as ContainerInfo
|
||||||
|
?? _connectionTree.SelectedNode;
|
||||||
|
_connectionInitiator.OpenConnection(connectionTarget, ConnectionInfo.Force.ViewOnly);
|
||||||
|
}
|
||||||
|
|
||||||
private void OnDisconnectClicked(object sender, EventArgs e)
|
private void OnDisconnectClicked(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DisconnectConnection(_connectionTree.SelectedNode);
|
DisconnectConnection(_connectionTree.SelectedNode);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
[System.Diagnostics.DebuggerStepThrough()]
|
[System.Diagnostics.DebuggerStepThrough()]
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
// System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SqlServerPage));
|
||||||
this.lblSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGLabel();
|
this.lblSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||||
this.txtSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
this.txtSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||||
this.lblExperimental = new mRemoteNG.UI.Controls.Base.NGLabel();
|
this.lblExperimental = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||||
@@ -34,13 +35,15 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
this.lblTestConnectionResults = new mRemoteNG.UI.Controls.Base.NGLabel();
|
this.lblTestConnectionResults = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||||
this.chkSQLReadOnly = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
this.chkSQLReadOnly = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||||
this.lblSQLReadOnly = new mRemoteNG.UI.Controls.Base.NGLabel();
|
this.lblSQLReadOnly = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||||
|
this.lblSQLType = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||||
|
this.txtSQLType = new mRemoteNG.UI.Controls.Base.NGComboBox();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// lblSQLDatabaseName
|
// lblSQLDatabaseName
|
||||||
//
|
//
|
||||||
this.lblSQLDatabaseName.Enabled = false;
|
this.lblSQLDatabaseName.Enabled = false;
|
||||||
this.lblSQLDatabaseName.Location = new System.Drawing.Point(23, 132);
|
this.lblSQLDatabaseName.Location = new System.Drawing.Point(23, 156);
|
||||||
this.lblSQLDatabaseName.Name = "lblSQLDatabaseName";
|
this.lblSQLDatabaseName.Name = "lblSQLDatabaseName";
|
||||||
this.lblSQLDatabaseName.Size = new System.Drawing.Size(111, 13);
|
this.lblSQLDatabaseName.Size = new System.Drawing.Size(111, 13);
|
||||||
this.lblSQLDatabaseName.TabIndex = 5;
|
this.lblSQLDatabaseName.TabIndex = 5;
|
||||||
@@ -51,7 +54,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
//
|
//
|
||||||
this.txtSQLDatabaseName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.txtSQLDatabaseName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.txtSQLDatabaseName.Enabled = false;
|
this.txtSQLDatabaseName.Enabled = false;
|
||||||
this.txtSQLDatabaseName.Location = new System.Drawing.Point(140, 130);
|
this.txtSQLDatabaseName.Location = new System.Drawing.Point(140, 154);
|
||||||
this.txtSQLDatabaseName.Name = "txtSQLDatabaseName";
|
this.txtSQLDatabaseName.Name = "txtSQLDatabaseName";
|
||||||
this.txtSQLDatabaseName.Size = new System.Drawing.Size(153, 22);
|
this.txtSQLDatabaseName.Size = new System.Drawing.Size(153, 22);
|
||||||
this.txtSQLDatabaseName.TabIndex = 6;
|
this.txtSQLDatabaseName.TabIndex = 6;
|
||||||
@@ -86,7 +89,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
// lblSQLUsername
|
// lblSQLUsername
|
||||||
//
|
//
|
||||||
this.lblSQLUsername.Enabled = false;
|
this.lblSQLUsername.Enabled = false;
|
||||||
this.lblSQLUsername.Location = new System.Drawing.Point(23, 158);
|
this.lblSQLUsername.Location = new System.Drawing.Point(23, 182);
|
||||||
this.lblSQLUsername.Name = "lblSQLUsername";
|
this.lblSQLUsername.Name = "lblSQLUsername";
|
||||||
this.lblSQLUsername.Size = new System.Drawing.Size(111, 13);
|
this.lblSQLUsername.Size = new System.Drawing.Size(111, 13);
|
||||||
this.lblSQLUsername.TabIndex = 7;
|
this.lblSQLUsername.TabIndex = 7;
|
||||||
@@ -97,7 +100,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
//
|
//
|
||||||
this.txtSQLPassword.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.txtSQLPassword.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.txtSQLPassword.Enabled = false;
|
this.txtSQLPassword.Enabled = false;
|
||||||
this.txtSQLPassword.Location = new System.Drawing.Point(140, 182);
|
this.txtSQLPassword.Location = new System.Drawing.Point(140, 206);
|
||||||
this.txtSQLPassword.Name = "txtSQLPassword";
|
this.txtSQLPassword.Name = "txtSQLPassword";
|
||||||
this.txtSQLPassword.Size = new System.Drawing.Size(153, 22);
|
this.txtSQLPassword.Size = new System.Drawing.Size(153, 22);
|
||||||
this.txtSQLPassword.TabIndex = 10;
|
this.txtSQLPassword.TabIndex = 10;
|
||||||
@@ -120,7 +123,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
// lblSQLServer
|
// lblSQLServer
|
||||||
//
|
//
|
||||||
this.lblSQLServer.Enabled = false;
|
this.lblSQLServer.Enabled = false;
|
||||||
this.lblSQLServer.Location = new System.Drawing.Point(23, 106);
|
this.lblSQLServer.Location = new System.Drawing.Point(23, 130);
|
||||||
this.lblSQLServer.Name = "lblSQLServer";
|
this.lblSQLServer.Name = "lblSQLServer";
|
||||||
this.lblSQLServer.Size = new System.Drawing.Size(111, 13);
|
this.lblSQLServer.Size = new System.Drawing.Size(111, 13);
|
||||||
this.lblSQLServer.TabIndex = 3;
|
this.lblSQLServer.TabIndex = 3;
|
||||||
@@ -131,7 +134,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
//
|
//
|
||||||
this.txtSQLUsername.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.txtSQLUsername.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.txtSQLUsername.Enabled = false;
|
this.txtSQLUsername.Enabled = false;
|
||||||
this.txtSQLUsername.Location = new System.Drawing.Point(140, 156);
|
this.txtSQLUsername.Location = new System.Drawing.Point(140, 180);
|
||||||
this.txtSQLUsername.Name = "txtSQLUsername";
|
this.txtSQLUsername.Name = "txtSQLUsername";
|
||||||
this.txtSQLUsername.Size = new System.Drawing.Size(153, 22);
|
this.txtSQLUsername.Size = new System.Drawing.Size(153, 22);
|
||||||
this.txtSQLUsername.TabIndex = 8;
|
this.txtSQLUsername.TabIndex = 8;
|
||||||
@@ -140,7 +143,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
//
|
//
|
||||||
this.txtSQLServer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.txtSQLServer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.txtSQLServer.Enabled = false;
|
this.txtSQLServer.Enabled = false;
|
||||||
this.txtSQLServer.Location = new System.Drawing.Point(140, 103);
|
this.txtSQLServer.Location = new System.Drawing.Point(140, 128);
|
||||||
this.txtSQLServer.Name = "txtSQLServer";
|
this.txtSQLServer.Name = "txtSQLServer";
|
||||||
this.txtSQLServer.Size = new System.Drawing.Size(153, 22);
|
this.txtSQLServer.Size = new System.Drawing.Size(153, 22);
|
||||||
this.txtSQLServer.TabIndex = 4;
|
this.txtSQLServer.TabIndex = 4;
|
||||||
@@ -148,7 +151,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
// lblSQLPassword
|
// lblSQLPassword
|
||||||
//
|
//
|
||||||
this.lblSQLPassword.Enabled = false;
|
this.lblSQLPassword.Enabled = false;
|
||||||
this.lblSQLPassword.Location = new System.Drawing.Point(23, 184);
|
this.lblSQLPassword.Location = new System.Drawing.Point(23, 208);
|
||||||
this.lblSQLPassword.Name = "lblSQLPassword";
|
this.lblSQLPassword.Name = "lblSQLPassword";
|
||||||
this.lblSQLPassword.Size = new System.Drawing.Size(111, 13);
|
this.lblSQLPassword.Size = new System.Drawing.Size(111, 13);
|
||||||
this.lblSQLPassword.TabIndex = 9;
|
this.lblSQLPassword.TabIndex = 9;
|
||||||
@@ -159,7 +162,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
//
|
//
|
||||||
this.btnTestConnection._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
this.btnTestConnection._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
||||||
this.btnTestConnection.Enabled = false;
|
this.btnTestConnection.Enabled = false;
|
||||||
this.btnTestConnection.Location = new System.Drawing.Point(140, 228);
|
this.btnTestConnection.Location = new System.Drawing.Point(140, 252);
|
||||||
this.btnTestConnection.Name = "btnTestConnection";
|
this.btnTestConnection.Name = "btnTestConnection";
|
||||||
this.btnTestConnection.Size = new System.Drawing.Size(153, 23);
|
this.btnTestConnection.Size = new System.Drawing.Size(153, 23);
|
||||||
this.btnTestConnection.TabIndex = 11;
|
this.btnTestConnection.TabIndex = 11;
|
||||||
@@ -170,7 +173,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
// imgConnectionStatus
|
// imgConnectionStatus
|
||||||
//
|
//
|
||||||
this.imgConnectionStatus.Image = global::mRemoteNG.Resources.Help;
|
this.imgConnectionStatus.Image = global::mRemoteNG.Resources.Help;
|
||||||
this.imgConnectionStatus.Location = new System.Drawing.Point(297, 231);
|
this.imgConnectionStatus.Location = new System.Drawing.Point(297, 255);
|
||||||
this.imgConnectionStatus.Name = "imgConnectionStatus";
|
this.imgConnectionStatus.Name = "imgConnectionStatus";
|
||||||
this.imgConnectionStatus.Size = new System.Drawing.Size(16, 16);
|
this.imgConnectionStatus.Size = new System.Drawing.Size(16, 16);
|
||||||
this.imgConnectionStatus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
this.imgConnectionStatus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||||
@@ -180,7 +183,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
// lblTestConnectionResults
|
// lblTestConnectionResults
|
||||||
//
|
//
|
||||||
this.lblTestConnectionResults.AutoSize = true;
|
this.lblTestConnectionResults.AutoSize = true;
|
||||||
this.lblTestConnectionResults.Location = new System.Drawing.Point(137, 254);
|
this.lblTestConnectionResults.Location = new System.Drawing.Point(137, 278);
|
||||||
this.lblTestConnectionResults.Name = "lblTestConnectionResults";
|
this.lblTestConnectionResults.Name = "lblTestConnectionResults";
|
||||||
this.lblTestConnectionResults.Size = new System.Drawing.Size(124, 13);
|
this.lblTestConnectionResults.Size = new System.Drawing.Size(124, 13);
|
||||||
this.lblTestConnectionResults.TabIndex = 13;
|
this.lblTestConnectionResults.TabIndex = 13;
|
||||||
@@ -191,7 +194,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
this.chkSQLReadOnly._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
this.chkSQLReadOnly._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
||||||
this.chkSQLReadOnly.AutoSize = true;
|
this.chkSQLReadOnly.AutoSize = true;
|
||||||
this.chkSQLReadOnly.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.chkSQLReadOnly.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.chkSQLReadOnly.Location = new System.Drawing.Point(140, 208);
|
this.chkSQLReadOnly.Location = new System.Drawing.Point(140, 232);
|
||||||
this.chkSQLReadOnly.Name = "chkSQLReadOnly";
|
this.chkSQLReadOnly.Name = "chkSQLReadOnly";
|
||||||
this.chkSQLReadOnly.Size = new System.Drawing.Size(15, 14);
|
this.chkSQLReadOnly.Size = new System.Drawing.Size(15, 14);
|
||||||
this.chkSQLReadOnly.TabIndex = 14;
|
this.chkSQLReadOnly.TabIndex = 14;
|
||||||
@@ -200,17 +203,42 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
// lblSQLReadOnly
|
// lblSQLReadOnly
|
||||||
//
|
//
|
||||||
this.lblSQLReadOnly.Enabled = false;
|
this.lblSQLReadOnly.Enabled = false;
|
||||||
this.lblSQLReadOnly.Location = new System.Drawing.Point(23, 208);
|
this.lblSQLReadOnly.Location = new System.Drawing.Point(23, 232);
|
||||||
this.lblSQLReadOnly.Name = "lblSQLReadOnly";
|
this.lblSQLReadOnly.Name = "lblSQLReadOnly";
|
||||||
this.lblSQLReadOnly.Size = new System.Drawing.Size(111, 13);
|
this.lblSQLReadOnly.Size = new System.Drawing.Size(111, 13);
|
||||||
this.lblSQLReadOnly.TabIndex = 15;
|
this.lblSQLReadOnly.TabIndex = 15;
|
||||||
this.lblSQLReadOnly.Text = "Read Only:";
|
this.lblSQLReadOnly.Text = "Read Only:";
|
||||||
this.lblSQLReadOnly.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
this.lblSQLReadOnly.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
|
//
|
||||||
|
// lblSQLType
|
||||||
|
//
|
||||||
|
this.lblSQLType.Enabled = false;
|
||||||
|
this.lblSQLType.Location = new System.Drawing.Point(23, 106);
|
||||||
|
this.lblSQLType.Name = "lblSQLType";
|
||||||
|
this.lblSQLType.Size = new System.Drawing.Size(111, 13);
|
||||||
|
this.lblSQLType.TabIndex = 20;
|
||||||
|
this.lblSQLType.Text = "SQL Server Type:";
|
||||||
|
this.lblSQLType.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
|
//
|
||||||
|
// txtSQLType
|
||||||
|
//
|
||||||
|
this.txtSQLType._mice = mRemoteNG.UI.Controls.Base.NGComboBox.MouseState.HOVER;
|
||||||
|
this.txtSQLType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.txtSQLType.FormattingEnabled = true;
|
||||||
|
this.txtSQLType.Items.AddRange(new object[] {
|
||||||
|
"mssql",
|
||||||
|
"mysql"});
|
||||||
|
this.txtSQLType.Location = new System.Drawing.Point(140, 102);
|
||||||
|
this.txtSQLType.Name = "txtSQLType";
|
||||||
|
this.txtSQLType.Size = new System.Drawing.Size(153, 21);
|
||||||
|
this.txtSQLType.TabIndex = 21;
|
||||||
//
|
//
|
||||||
// SqlServerPage
|
// SqlServerPage
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.Controls.Add(this.txtSQLType);
|
||||||
|
this.Controls.Add(this.lblSQLType);
|
||||||
this.Controls.Add(this.lblSQLReadOnly);
|
this.Controls.Add(this.lblSQLReadOnly);
|
||||||
this.Controls.Add(this.chkSQLReadOnly);
|
this.Controls.Add(this.chkSQLReadOnly);
|
||||||
this.Controls.Add(this.lblTestConnectionResults);
|
this.Controls.Add(this.lblTestConnectionResults);
|
||||||
@@ -233,7 +261,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
internal Controls.Base.NGLabel lblSQLDatabaseName;
|
internal Controls.Base.NGLabel lblSQLDatabaseName;
|
||||||
internal Controls.Base.NGTextBox txtSQLDatabaseName;
|
internal Controls.Base.NGTextBox txtSQLDatabaseName;
|
||||||
@@ -251,5 +278,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
private Controls.Base.NGLabel lblTestConnectionResults;
|
private Controls.Base.NGLabel lblTestConnectionResults;
|
||||||
private Controls.Base.NGCheckBox chkSQLReadOnly;
|
private Controls.Base.NGCheckBox chkSQLReadOnly;
|
||||||
internal Controls.Base.NGLabel lblSQLReadOnly;
|
internal Controls.Base.NGLabel lblSQLReadOnly;
|
||||||
|
internal Controls.Base.NGLabel lblSQLType;
|
||||||
|
private Controls.Base.NGComboBox txtSQLType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using mRemoteNG.App;
|
using mRemoteNG.App;
|
||||||
using mRemoteNG.Config.Connections;
|
using mRemoteNG.Config.Connections;
|
||||||
using mRemoteNG.Config.Connections.Multiuser;
|
using mRemoteNG.Config.Connections.Multiuser;
|
||||||
@@ -9,14 +9,14 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
{
|
{
|
||||||
public sealed partial class SqlServerPage
|
public sealed partial class SqlServerPage
|
||||||
{
|
{
|
||||||
private readonly SqlDatabaseConnectionTester _databaseConnectionTester;
|
private readonly DatabaseConnectionTester _databaseConnectionTester;
|
||||||
|
|
||||||
public SqlServerPage()
|
public SqlServerPage()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
ApplyTheme();
|
ApplyTheme();
|
||||||
PageIcon = Resources.Database_Icon;
|
PageIcon = Resources.Database_Icon;
|
||||||
_databaseConnectionTester = new SqlDatabaseConnectionTester();
|
_databaseConnectionTester = new DatabaseConnectionTester();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string PageName
|
public override string PageName
|
||||||
@@ -44,6 +44,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
public override void LoadSettings()
|
public override void LoadSettings()
|
||||||
{
|
{
|
||||||
chkUseSQLServer.Checked = Settings.Default.UseSQLServer;
|
chkUseSQLServer.Checked = Settings.Default.UseSQLServer;
|
||||||
|
txtSQLType.Text = Settings.Default.SQLServerType;
|
||||||
txtSQLServer.Text = Settings.Default.SQLHost;
|
txtSQLServer.Text = Settings.Default.SQLHost;
|
||||||
txtSQLDatabaseName.Text = Settings.Default.SQLDatabaseName;
|
txtSQLDatabaseName.Text = Settings.Default.SQLDatabaseName;
|
||||||
txtSQLUsername.Text = Settings.Default.SQLUser;
|
txtSQLUsername.Text = Settings.Default.SQLUser;
|
||||||
@@ -59,6 +60,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
var sqlServerWasPreviouslyEnabled = Settings.Default.UseSQLServer;
|
var sqlServerWasPreviouslyEnabled = Settings.Default.UseSQLServer;
|
||||||
|
|
||||||
Settings.Default.UseSQLServer = chkUseSQLServer.Checked;
|
Settings.Default.UseSQLServer = chkUseSQLServer.Checked;
|
||||||
|
Settings.Default.SQLServerType = txtSQLType.Text;
|
||||||
Settings.Default.SQLHost = txtSQLServer.Text;
|
Settings.Default.SQLHost = txtSQLServer.Text;
|
||||||
Settings.Default.SQLDatabaseName = txtSQLDatabaseName.Text;
|
Settings.Default.SQLDatabaseName = txtSQLDatabaseName.Text;
|
||||||
Settings.Default.SQLUser = txtSQLUsername.Text;
|
Settings.Default.SQLUser = txtSQLUsername.Text;
|
||||||
@@ -94,11 +96,13 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
|
|
||||||
private void toggleSQLPageControls(bool useSQLServer)
|
private void toggleSQLPageControls(bool useSQLServer)
|
||||||
{
|
{
|
||||||
|
lblSQLType.Enabled = useSQLServer;
|
||||||
lblSQLServer.Enabled = useSQLServer;
|
lblSQLServer.Enabled = useSQLServer;
|
||||||
lblSQLDatabaseName.Enabled = useSQLServer;
|
lblSQLDatabaseName.Enabled = useSQLServer;
|
||||||
lblSQLUsername.Enabled = useSQLServer;
|
lblSQLUsername.Enabled = useSQLServer;
|
||||||
lblSQLPassword.Enabled = useSQLServer;
|
lblSQLPassword.Enabled = useSQLServer;
|
||||||
lblSQLReadOnly.Enabled = useSQLServer;
|
lblSQLReadOnly.Enabled = useSQLServer;
|
||||||
|
txtSQLType.Enabled = useSQLServer;
|
||||||
txtSQLServer.Enabled = useSQLServer;
|
txtSQLServer.Enabled = useSQLServer;
|
||||||
txtSQLDatabaseName.Enabled = useSQLServer;
|
txtSQLDatabaseName.Enabled = useSQLServer;
|
||||||
txtSQLUsername.Enabled = useSQLServer;
|
txtSQLUsername.Enabled = useSQLServer;
|
||||||
@@ -109,6 +113,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
|
|
||||||
private async void btnTestConnection_Click(object sender, EventArgs e)
|
private async void btnTestConnection_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var type = txtSQLType.Text;
|
||||||
var server = txtSQLServer.Text;
|
var server = txtSQLServer.Text;
|
||||||
var database = txtSQLDatabaseName.Text;
|
var database = txtSQLDatabaseName.Text;
|
||||||
var username = txtSQLUsername.Text;
|
var username = txtSQLUsername.Text;
|
||||||
@@ -119,7 +124,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
|||||||
btnTestConnection.Enabled = false;
|
btnTestConnection.Enabled = false;
|
||||||
|
|
||||||
var connectionTestResult =
|
var connectionTestResult =
|
||||||
await _databaseConnectionTester.TestConnectivity(server, database, username, password);
|
await _databaseConnectionTester.TestConnectivity(type, server, database, username, password);
|
||||||
|
|
||||||
btnTestConnection.Enabled = true;
|
btnTestConnection.Enabled = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
using mRemoteNG.Themes;
|
using mRemoteNG.Themes;
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
//
|
//
|
||||||
// ActiveDirectoryTree
|
// ActiveDirectoryTree
|
||||||
//
|
//
|
||||||
this.ActiveDirectoryTree.ADPath = null;
|
this.ActiveDirectoryTree.AdPath = null;
|
||||||
this.ActiveDirectoryTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
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.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
@@ -76,7 +76,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
this.ActiveDirectoryTree.SelectedNode = null;
|
this.ActiveDirectoryTree.SelectedNode = null;
|
||||||
this.ActiveDirectoryTree.Size = new System.Drawing.Size(510, 285);
|
this.ActiveDirectoryTree.Size = new System.Drawing.Size(510, 285);
|
||||||
this.ActiveDirectoryTree.TabIndex = 3;
|
this.ActiveDirectoryTree.TabIndex = 3;
|
||||||
this.ActiveDirectoryTree.ADPathChanged += new ADTree.ADtree.ADPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged);
|
this.ActiveDirectoryTree.AdPathChanged += new ADTree.ADtree.AdPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged);
|
||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using WeifenLuo.WinFormsUI.Docking;
|
using WeifenLuo.WinFormsUI.Docking;
|
||||||
@@ -57,7 +57,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
else
|
else
|
||||||
importDestination = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes.First();
|
importDestination = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes.First();
|
||||||
|
|
||||||
Import.ImportFromActiveDirectory(ActiveDirectoryTree.ADPath, importDestination, chkSubOU.Checked);
|
Import.ImportFromActiveDirectory(ActiveDirectoryTree.AdPath, importDestination, chkSubOU.Checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -80,6 +80,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
ChangeDomain();
|
ChangeDomain();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReSharper disable once UnusedParameter.Local
|
||||||
private void ActiveDirectoryTree_ADPathChanged(object sender)
|
private void ActiveDirectoryTree_ADPathChanged(object sender)
|
||||||
{
|
{
|
||||||
EnableDisableImportButton();
|
EnableDisableImportButton();
|
||||||
@@ -105,7 +106,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
|
|
||||||
private void EnableDisableImportButton()
|
private void EnableDisableImportButton()
|
||||||
{
|
{
|
||||||
btnImport.Enabled = !string.IsNullOrEmpty(ActiveDirectoryTree.ADPath);
|
btnImport.Enabled = !string.IsNullOrEmpty(ActiveDirectoryTree.AdPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
58
mRemoteV1/UI/Window/ConnectionTreeWindow.Designer.cs
generated
58
mRemoteV1/UI/Window/ConnectionTreeWindow.Designer.cs
generated
@@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
using mRemoteNG.Connection;
|
using mRemoteNG.Connection;
|
||||||
using mRemoteNG.Tree;
|
using mRemoteNG.Tree;
|
||||||
@@ -29,14 +29,14 @@ namespace mRemoteNG.UI.Window
|
|||||||
this.mMenViewExpandAllFolders = new System.Windows.Forms.ToolStripMenuItem();
|
this.mMenViewExpandAllFolders = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mMenViewCollapseAllFolders = new System.Windows.Forms.ToolStripMenuItem();
|
this.mMenViewCollapseAllFolders = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mMenSortAscending = new System.Windows.Forms.ToolStripMenuItem();
|
this.mMenSortAscending = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components);
|
|
||||||
this.PictureBoxSearch = new mRemoteNG.UI.Controls.Base.NGPictureBox(this.components);
|
|
||||||
this.txtSearch = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
|
||||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
|
||||||
this.mMenFavorites = new System.Windows.Forms.ToolStripMenuItem();
|
this.mMenFavorites = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components);
|
||||||
|
this.pbSearch = new mRemoteNG.UI.Controls.Base.NGPictureBox(this.components);
|
||||||
|
this.txtSearch = new mRemoteNG.UI.Controls.Base.NGSearchBox();
|
||||||
|
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.olvConnections)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.olvConnections)).BeginInit();
|
||||||
this.msMain.SuspendLayout();
|
this.msMain.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.PictureBoxSearch)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbSearch)).BeginInit();
|
||||||
this.tableLayoutPanel1.SuspendLayout();
|
this.tableLayoutPanel1.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@@ -133,21 +133,29 @@ namespace mRemoteNG.UI.Window
|
|||||||
this.mMenSortAscending.Name = "mMenSortAscending";
|
this.mMenSortAscending.Name = "mMenSortAscending";
|
||||||
this.mMenSortAscending.Size = new System.Drawing.Size(28, 20);
|
this.mMenSortAscending.Size = new System.Drawing.Size(28, 20);
|
||||||
//
|
//
|
||||||
|
// mMenFavorites
|
||||||
|
//
|
||||||
|
this.mMenFavorites.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||||
|
this.mMenFavorites.Image = global::mRemoteNG.Resources.star;
|
||||||
|
this.mMenFavorites.Name = "mMenFavorites";
|
||||||
|
this.mMenFavorites.Size = new System.Drawing.Size(28, 20);
|
||||||
|
this.mMenFavorites.Text = "Favorites";
|
||||||
|
//
|
||||||
// vsToolStripExtender
|
// vsToolStripExtender
|
||||||
//
|
//
|
||||||
this.vsToolStripExtender.DefaultRenderer = null;
|
this.vsToolStripExtender.DefaultRenderer = null;
|
||||||
//
|
//
|
||||||
// PictureBoxSearch
|
// pbSearch
|
||||||
//
|
//
|
||||||
this.PictureBoxSearch.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.pbSearch.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.PictureBoxSearch.Image = global::mRemoteNG.Resources.Search;
|
this.pbSearch.Image = global::mRemoteNG.Resources.Search;
|
||||||
this.PictureBoxSearch.Location = new System.Drawing.Point(0, 0);
|
this.pbSearch.Location = new System.Drawing.Point(0, 0);
|
||||||
this.PictureBoxSearch.Margin = new System.Windows.Forms.Padding(0);
|
this.pbSearch.Margin = new System.Windows.Forms.Padding(0);
|
||||||
this.PictureBoxSearch.Name = "PictureBoxSearch";
|
this.pbSearch.Name = "pbSearch";
|
||||||
this.PictureBoxSearch.Size = new System.Drawing.Size(26, 21);
|
this.pbSearch.Size = new System.Drawing.Size(26, 21);
|
||||||
this.PictureBoxSearch.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
this.pbSearch.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
||||||
this.PictureBoxSearch.TabIndex = 1;
|
this.pbSearch.TabIndex = 1;
|
||||||
this.PictureBoxSearch.TabStop = false;
|
this.pbSearch.TabStop = false;
|
||||||
//
|
//
|
||||||
// txtSearch
|
// txtSearch
|
||||||
//
|
//
|
||||||
@@ -163,9 +171,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
this.txtSearch.TabStop = false;
|
this.txtSearch.TabStop = false;
|
||||||
this.txtSearch.Text = "Search";
|
this.txtSearch.Text = "Search";
|
||||||
this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged);
|
this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged);
|
||||||
this.txtSearch.GotFocus += new System.EventHandler(this.txtSearch_GotFocus);
|
|
||||||
this.txtSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown);
|
this.txtSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown);
|
||||||
this.txtSearch.LostFocus += new System.EventHandler(this.txtSearch_LostFocus);
|
|
||||||
//
|
//
|
||||||
// tableLayoutPanel1
|
// tableLayoutPanel1
|
||||||
//
|
//
|
||||||
@@ -173,7 +179,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
this.tableLayoutPanel1.ColumnCount = 2;
|
this.tableLayoutPanel1.ColumnCount = 2;
|
||||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 26F));
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 26F));
|
||||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
this.tableLayoutPanel1.Controls.Add(this.PictureBoxSearch, 0, 0);
|
this.tableLayoutPanel1.Controls.Add(this.pbSearch, 0, 0);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.txtSearch);
|
this.tableLayoutPanel1.Controls.Add(this.txtSearch);
|
||||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 390);
|
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 390);
|
||||||
@@ -183,14 +189,6 @@ namespace mRemoteNG.UI.Window
|
|||||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(204, 21);
|
this.tableLayoutPanel1.Size = new System.Drawing.Size(204, 21);
|
||||||
this.tableLayoutPanel1.TabIndex = 32;
|
this.tableLayoutPanel1.TabIndex = 32;
|
||||||
//
|
//
|
||||||
// mMenFavorites
|
|
||||||
//
|
|
||||||
this.mMenFavorites.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
|
||||||
this.mMenFavorites.Image = global::mRemoteNG.Resources.star;
|
|
||||||
this.mMenFavorites.Name = "mMenFavorites";
|
|
||||||
this.mMenFavorites.Size = new System.Drawing.Size(28, 20);
|
|
||||||
this.mMenFavorites.Text = "Favorites";
|
|
||||||
//
|
|
||||||
// ConnectionTreeWindow
|
// ConnectionTreeWindow
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
@@ -209,7 +207,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.olvConnections)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.olvConnections)).EndInit();
|
||||||
this.msMain.ResumeLayout(false);
|
this.msMain.ResumeLayout(false);
|
||||||
this.msMain.PerformLayout();
|
this.msMain.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.PictureBoxSearch)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbSearch)).EndInit();
|
||||||
this.tableLayoutPanel1.ResumeLayout(false);
|
this.tableLayoutPanel1.ResumeLayout(false);
|
||||||
this.tableLayoutPanel1.PerformLayout();
|
this.tableLayoutPanel1.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
@@ -221,8 +219,8 @@ namespace mRemoteNG.UI.Window
|
|||||||
private System.ComponentModel.IContainer components;
|
private System.ComponentModel.IContainer components;
|
||||||
private Controls.ConnectionTree olvConnections;
|
private Controls.ConnectionTree olvConnections;
|
||||||
private WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender vsToolStripExtender;
|
private WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender vsToolStripExtender;
|
||||||
internal Controls.Base.NGPictureBox PictureBoxSearch;
|
internal Controls.Base.NGPictureBox pbSearch;
|
||||||
internal Controls.Base.NGTextBox txtSearch;
|
internal Controls.Base.NGSearchBox txtSearch;
|
||||||
public System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
public System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||||
internal System.Windows.Forms.ToolStripMenuItem mMenFavorites;
|
internal System.Windows.Forms.ToolStripMenuItem mMenFavorites;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
_themeManager.ActiveTheme.Theme);
|
_themeManager.ActiveTheme.Theme);
|
||||||
|
|
||||||
if (!_themeManager.ActiveAndExtended) return;
|
if (!_themeManager.ActiveAndExtended) return;
|
||||||
//Treelistview need to be manually themed
|
//Treelistview needs to be manually themed
|
||||||
olvConnections.BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TreeView_Background");
|
olvConnections.BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TreeView_Background");
|
||||||
olvConnections.ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TreeView_Foreground");
|
olvConnections.ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TreeView_Foreground");
|
||||||
olvConnections.SelectedBackColor =
|
olvConnections.SelectedBackColor =
|
||||||
@@ -117,6 +117,8 @@ namespace mRemoteNG.UI.Window
|
|||||||
//There is a border around txtSearch that dont theme well
|
//There is a border around txtSearch that dont theme well
|
||||||
txtSearch.BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Background");
|
txtSearch.BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Background");
|
||||||
txtSearch.ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Foreground");
|
txtSearch.ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Foreground");
|
||||||
|
//Picturebox needs to be manually themed
|
||||||
|
pbSearch.BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TreeView_Background");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -252,18 +254,6 @@ namespace mRemoteNG.UI.Window
|
|||||||
|
|
||||||
#region Search
|
#region Search
|
||||||
|
|
||||||
private void txtSearch_GotFocus(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (txtSearch.Text == Language.strSearchPrompt)
|
|
||||||
txtSearch.Text = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
private void txtSearch_LostFocus(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (txtSearch.Text != "") return;
|
|
||||||
txtSearch.Text = Language.strSearchPrompt;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void txtSearch_KeyDown(object sender, KeyEventArgs e)
|
private void txtSearch_KeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -295,9 +285,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Runtime.MessageCollector.AddExceptionStackTrace(
|
Runtime.MessageCollector.AddExceptionStackTrace("txtSearch_KeyDown (UI.Window.ConnectionTreeWindow) failed", ex);
|
||||||
"txtSearch_KeyDown (UI.Window.ConnectionTreeWindow) failed",
|
|
||||||
ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,9 +348,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Runtime.MessageCollector.AddExceptionStackTrace(
|
Runtime.MessageCollector.AddExceptionStackTrace("tvConnections_KeyPress (UI.Window.ConnectionTreeWindow) failed", ex);
|
||||||
"tvConnections_KeyPress (UI.Window.ConnectionTreeWindow) failed",
|
|
||||||
ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,9 +370,7 @@ namespace mRemoteNG.UI.Window
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Runtime.MessageCollector.AddExceptionStackTrace(
|
Runtime.MessageCollector.AddExceptionStackTrace("tvConnections_KeyDown (UI.Window.ConnectionTreeWindow) failed", ex);
|
||||||
"tvConnections_KeyDown (UI.Window.ConnectionTreeWindow) failed",
|
|
||||||
ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -15,9 +15,9 @@ using mRemoteNG.Themes;
|
|||||||
using mRemoteNG.Tools;
|
using mRemoteNG.Tools;
|
||||||
using mRemoteNG.UI.Forms;
|
using mRemoteNG.UI.Forms;
|
||||||
using mRemoteNG.UI.Forms.Input;
|
using mRemoteNG.UI.Forms.Input;
|
||||||
|
using mRemoteNG.UI.Tabs;
|
||||||
using mRemoteNG.UI.TaskDialog;
|
using mRemoteNG.UI.TaskDialog;
|
||||||
using WeifenLuo.WinFormsUI.Docking;
|
using WeifenLuo.WinFormsUI.Docking;
|
||||||
using mRemoteNG.UI.Tabs;
|
|
||||||
|
|
||||||
namespace mRemoteNG.UI.Window
|
namespace mRemoteNG.UI.Window
|
||||||
{
|
{
|
||||||
@@ -363,6 +363,16 @@ namespace mRemoteNG.UI.Window
|
|||||||
var interfaceControl = GetInterfaceControl();
|
var interfaceControl = GetInterfaceControl();
|
||||||
if (interfaceControl == null) return;
|
if (interfaceControl == null) return;
|
||||||
|
|
||||||
|
if (interfaceControl.Protocol is ISupportsViewOnly viewOnly)
|
||||||
|
{
|
||||||
|
cmenTabViewOnly.Visible = true;
|
||||||
|
cmenTabViewOnly.Checked = viewOnly.ViewOnly;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmenTabViewOnly.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (interfaceControl.Info.Protocol == ProtocolType.RDP)
|
if (interfaceControl.Info.Protocol == ProtocolType.RDP)
|
||||||
{
|
{
|
||||||
var rdp = (RdpProtocol)interfaceControl.Protocol;
|
var rdp = (RdpProtocol)interfaceControl.Protocol;
|
||||||
@@ -381,18 +391,15 @@ namespace mRemoteNG.UI.Window
|
|||||||
{
|
{
|
||||||
var vnc = (ProtocolVNC)interfaceControl.Protocol;
|
var vnc = (ProtocolVNC)interfaceControl.Protocol;
|
||||||
cmenTabSendSpecialKeys.Visible = true;
|
cmenTabSendSpecialKeys.Visible = true;
|
||||||
cmenTabViewOnly.Visible = true;
|
|
||||||
cmenTabSmartSize.Visible = true;
|
cmenTabSmartSize.Visible = true;
|
||||||
cmenTabStartChat.Visible = true;
|
cmenTabStartChat.Visible = true;
|
||||||
cmenTabRefreshScreen.Visible = true;
|
cmenTabRefreshScreen.Visible = true;
|
||||||
cmenTabTransferFile.Visible = false;
|
cmenTabTransferFile.Visible = false;
|
||||||
cmenTabSmartSize.Checked = vnc.SmartSize;
|
cmenTabSmartSize.Checked = vnc.SmartSize;
|
||||||
cmenTabViewOnly.Checked = vnc.ViewOnly;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmenTabSendSpecialKeys.Visible = false;
|
cmenTabSendSpecialKeys.Visible = false;
|
||||||
cmenTabViewOnly.Visible = false;
|
|
||||||
cmenTabStartChat.Visible = false;
|
cmenTabStartChat.Visible = false;
|
||||||
cmenTabRefreshScreen.Visible = false;
|
cmenTabRefreshScreen.Visible = false;
|
||||||
cmenTabTransferFile.Visible = false;
|
cmenTabTransferFile.Visible = false;
|
||||||
@@ -500,9 +507,11 @@ namespace mRemoteNG.UI.Window
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var interfaceControl = GetInterfaceControl();
|
var interfaceControl = GetInterfaceControl();
|
||||||
if (!(interfaceControl?.Protocol is ProtocolVNC vnc)) return;
|
if (!(interfaceControl?.Protocol is ISupportsViewOnly viewOnly))
|
||||||
|
return;
|
||||||
|
|
||||||
cmenTabViewOnly.Checked = !cmenTabViewOnly.Checked;
|
cmenTabViewOnly.Checked = !cmenTabViewOnly.Checked;
|
||||||
vnc.ToggleViewOnly();
|
viewOnly.ToggleViewOnly();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -735,6 +735,9 @@
|
|||||||
<setting name="InhDefaultFavorite" serializeAs="String">
|
<setting name="InhDefaultFavorite" serializeAs="String">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting name="SQLServerType" serializeAs="String">
|
||||||
|
<value>mssql</value>
|
||||||
|
</setting>
|
||||||
</mRemoteNG.Settings>
|
</mRemoteNG.Settings>
|
||||||
</userSettings>
|
</userSettings>
|
||||||
<applicationSettings>
|
<applicationSettings>
|
||||||
|
|||||||
@@ -62,7 +62,11 @@
|
|||||||
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
<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>
|
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="mscorlib" />
|
<Reference Include="mscorlib" />
|
||||||
|
<Reference Include="MySql.Data, Version=8.0.13.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\MySql.Data.8.0.13\lib\net452\MySql.Data.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4, processorArchitecture=MSIL">
|
<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>
|
<HintPath>..\packages\ObjectListView.Official.2.9.1\lib\net20\ObjectListView.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -70,12 +74,17 @@
|
|||||||
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
|
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Configuration.Install" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.DirectoryServices" />
|
<Reference Include="System.DirectoryServices" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Drawing.Design" />
|
||||||
<Reference Include="System.Management" />
|
<Reference Include="System.Management" />
|
||||||
<Reference Include="System.Security" />
|
<Reference Include="System.Security" />
|
||||||
|
<Reference Include="System.Transactions" />
|
||||||
<Reference Include="System.Web" />
|
<Reference Include="System.Web" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
@@ -148,7 +157,8 @@
|
|||||||
<Compile Include="Config\CredentialRepositoryListSaver.cs" />
|
<Compile Include="Config\CredentialRepositoryListSaver.cs" />
|
||||||
<Compile Include="Config\DatabaseConnectors\ConnectionTestResult.cs" />
|
<Compile Include="Config\DatabaseConnectors\ConnectionTestResult.cs" />
|
||||||
<Compile Include="Config\DatabaseConnectors\DatabaseConnectorFactory.cs" />
|
<Compile Include="Config\DatabaseConnectors\DatabaseConnectorFactory.cs" />
|
||||||
<Compile Include="Config\DatabaseConnectors\SqlDatabaseConnectionTester.cs" />
|
<Compile Include="Config\DatabaseConnectors\DatabaseConnectionTester.cs" />
|
||||||
|
<Compile Include="Config\DatabaseConnectors\MSSqlDatabaseConnector.cs" />
|
||||||
<Compile Include="Config\DataProviders\FileBackupCreator.cs" />
|
<Compile Include="Config\DataProviders\FileBackupCreator.cs" />
|
||||||
<Compile Include="Config\DataProviders\FileBackupPruner.cs" />
|
<Compile Include="Config\DataProviders\FileBackupPruner.cs" />
|
||||||
<Compile Include="Config\DataProviders\InMemoryStringDataProvider.cs" />
|
<Compile Include="Config\DataProviders\InMemoryStringDataProvider.cs" />
|
||||||
@@ -223,7 +233,7 @@
|
|||||||
<Compile Include="Config\Putty\PuttySessionsManager.cs" />
|
<Compile Include="Config\Putty\PuttySessionsManager.cs" />
|
||||||
<Compile Include="Config\Putty\AbstractPuttySessionsProvider.cs" />
|
<Compile Include="Config\Putty\AbstractPuttySessionsProvider.cs" />
|
||||||
<Compile Include="Config\DatabaseConnectors\IDatabaseConnector.cs" />
|
<Compile Include="Config\DatabaseConnectors\IDatabaseConnector.cs" />
|
||||||
<Compile Include="Config\DatabaseConnectors\SqlDatabaseConnector.cs" />
|
<Compile Include="Config\DatabaseConnectors\MySqlDatabaseConnector.cs" />
|
||||||
<Compile Include="Connection\AbstractConnectionRecord.cs" />
|
<Compile Include="Connection\AbstractConnectionRecord.cs" />
|
||||||
<Compile Include="Connection\ConnectionInfoComparer.cs" />
|
<Compile Include="Connection\ConnectionInfoComparer.cs" />
|
||||||
<Compile Include="Connection\ConnectionInfoInheritance.cs" />
|
<Compile Include="Connection\ConnectionInfoInheritance.cs" />
|
||||||
@@ -239,6 +249,7 @@
|
|||||||
<Compile Include="Connection\Protocol\Http\Connection.Protocol.HTTPS.CertEvent.cs" />
|
<Compile Include="Connection\Protocol\Http\Connection.Protocol.HTTPS.CertEvent.cs" />
|
||||||
<Compile Include="Connection\Protocol\ProtocolFactory.cs" />
|
<Compile Include="Connection\Protocol\ProtocolFactory.cs" />
|
||||||
<Compile Include="Connection\Protocol\RDP\AzureLoadBalanceInfoEncoder.cs" />
|
<Compile Include="Connection\Protocol\RDP\AzureLoadBalanceInfoEncoder.cs" />
|
||||||
|
<Compile Include="Connection\Protocol\ISupportsViewOnly.cs" />
|
||||||
<Compile Include="Connection\Protocol\RDP\RdpClientWrap.cs">
|
<Compile Include="Connection\Protocol\RDP\RdpClientWrap.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -395,6 +406,9 @@
|
|||||||
<Compile Include="UI\Controls\Base\NGRadioButton.cs">
|
<Compile Include="UI\Controls\Base\NGRadioButton.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="UI\Controls\Base\NGSearchBox.cs">
|
||||||
|
<SubType>Component</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="UI\Controls\Base\NGTextBox.cs">
|
<Compile Include="UI\Controls\Base\NGTextBox.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -835,6 +849,9 @@
|
|||||||
<EmbeddedResource Include="UI\Controls\Base\NGRadioButton.resx">
|
<EmbeddedResource Include="UI\Controls\Base\NGRadioButton.resx">
|
||||||
<DependentUpon>NGRadioButton.cs</DependentUpon>
|
<DependentUpon>NGRadioButton.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="UI\Controls\Base\NGSearchBox.resx">
|
||||||
|
<DependentUpon>NGSearchBox.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="UI\Controls\Base\NGTextBox.resx">
|
<EmbeddedResource Include="UI\Controls\Base\NGTextBox.resx">
|
||||||
<DependentUpon>NGTextBox.cs</DependentUpon>
|
<DependentUpon>NGTextBox.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -911,6 +928,7 @@
|
|||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="UI\Forms\OptionsPages\SqlServerPage.resx">
|
<EmbeddedResource Include="UI\Forms\OptionsPages\SqlServerPage.resx">
|
||||||
<DependentUpon>SqlServerPage.cs</DependentUpon>
|
<DependentUpon>SqlServerPage.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="UI\Forms\OptionsPages\StartupExitPage.resx">
|
<EmbeddedResource Include="UI\Forms\OptionsPages\StartupExitPage.resx">
|
||||||
<DependentUpon>StartupExitPage.cs</DependentUpon>
|
<DependentUpon>StartupExitPage.cs</DependentUpon>
|
||||||
@@ -1366,7 +1384,10 @@
|
|||||||
<Content Include="Resources\Help\Screenshots\Reference\01.png">
|
<Content Include="Resources\Help\Screenshots\Reference\01.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="Resources\Help\SQLScript.txt">
|
<Content Include="Resources\Help\MSSQLScript.txt">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Resources\Help\MySQLScript.txt">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="Resources\Help\ui_file_transfer.htm">
|
<Content Include="Resources\Help\ui_file_transfer.htm">
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<package id="DockPanelSuite.ThemeVS2015" version="3.0.6" targetFramework="net46" />
|
<package id="DockPanelSuite.ThemeVS2015" version="3.0.6" targetFramework="net46" />
|
||||||
<package id="Geckofx45" version="45.0.34" targetFramework="net46" />
|
<package id="Geckofx45" version="45.0.34" targetFramework="net46" />
|
||||||
<package id="log4net" version="2.0.8" targetFramework="net46" />
|
<package id="log4net" version="2.0.8" targetFramework="net46" />
|
||||||
|
<package id="MySql.Data" version="8.0.13" targetFramework="net46" />
|
||||||
<package id="ObjectListView.Official" version="2.9.1" targetFramework="net46" />
|
<package id="ObjectListView.Official" version="2.9.1" targetFramework="net46" />
|
||||||
<package id="SSH.NET" version="2016.1.0" targetFramework="net46" />
|
<package id="SSH.NET" version="2016.1.0" targetFramework="net46" />
|
||||||
</packages>
|
</packages>
|
||||||
Reference in New Issue
Block a user