diff --git a/VAR.Toolbox/Code/IOutputHandler.cs b/VAR.Toolbox/Code/IOutputHandler.cs
new file mode 100644
index 0000000..efa2702
--- /dev/null
+++ b/VAR.Toolbox/Code/IOutputHandler.cs
@@ -0,0 +1,7 @@
+namespace VAR.Toolbox.Code
+{
+ public interface IOutputHandler
+ {
+ void OutputLine(string line);
+ }
+}
diff --git a/VAR.Toolbox/Code/IProxyCmdExecutor.cs b/VAR.Toolbox/Code/IProxyCmdExecutor.cs
new file mode 100644
index 0000000..5acf510
--- /dev/null
+++ b/VAR.Toolbox/Code/IProxyCmdExecutor.cs
@@ -0,0 +1,7 @@
+namespace VAR.Toolbox.Code
+{
+ public interface IProxyCmdExecutor
+ {
+ bool ExecuteCmd(string cmd, IOutputHandler outputHandler);
+ }
+}
diff --git a/VAR.Toolbox/Code/ProxyCmdExecutorDummy.cs b/VAR.Toolbox/Code/ProxyCmdExecutorDummy.cs
new file mode 100644
index 0000000..ed1556a
--- /dev/null
+++ b/VAR.Toolbox/Code/ProxyCmdExecutorDummy.cs
@@ -0,0 +1,11 @@
+namespace VAR.Toolbox.Code
+{
+ public class ProxyCmdExecutorDummy : IProxyCmdExecutor
+ {
+ public bool ExecuteCmd(string cmdString, IOutputHandler outputHandler)
+ {
+ outputHandler.OutputLine(string.Format("DummyExecution: {0}", cmdString));
+ return true;
+ }
+ }
+}
diff --git a/VAR.Toolbox/Code/ProxyCmdExecutorFactory.cs b/VAR.Toolbox/Code/ProxyCmdExecutorFactory.cs
new file mode 100644
index 0000000..813ae3a
--- /dev/null
+++ b/VAR.Toolbox/Code/ProxyCmdExecutorFactory.cs
@@ -0,0 +1,14 @@
+namespace VAR.Toolbox.Code
+{
+ public class ProxyCmdExecutorFactory
+ {
+ public static IProxyCmdExecutor CreateFromConfig(string config)
+ {
+ if (string.IsNullOrEmpty(config))
+ {
+ return new ProxyCmdExecutorDummy();
+ }
+ return new ProxyCmdExecutorThroughSQLServer(config);
+ }
+ }
+}
diff --git a/VAR.Toolbox/Code/ProxyCmdExecutorThroughSQLServer.cs b/VAR.Toolbox/Code/ProxyCmdExecutorThroughSQLServer.cs
new file mode 100644
index 0000000..2a43486
--- /dev/null
+++ b/VAR.Toolbox/Code/ProxyCmdExecutorThroughSQLServer.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Data.SqlClient;
+
+namespace VAR.Toolbox.Code
+{
+ public class ProxyCmdExecutorThroughSQLServer : IProxyCmdExecutor
+ {
+ private string _connectionString = null;
+
+ public ProxyCmdExecutorThroughSQLServer(string connectionString)
+ {
+ _connectionString = connectionString;
+ }
+
+ public bool ExecuteCmd(string cmdString, IOutputHandler outputHandler)
+ {
+ SqlConnection cnx = new SqlConnection(_connectionString);
+ SqlCommand cmd = cnx.CreateCommand();
+ cmd.CommandText = "exec master.dbo.xp_cmdshell @cmd";
+ cmd.Parameters.Add(new SqlParameter("cmd", cmdString));
+ cnx.Open();
+ SqlDataReader reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ string output = Convert.ToString(reader[0]);
+ outputHandler.OutputLine(output);
+ }
+ cnx.Close();
+ return true;
+ }
+ }
+}
diff --git a/VAR.Toolbox/UI/FrmProxyCmd.cs b/VAR.Toolbox/UI/FrmProxyCmd.cs
index 073b992..6c4aa17 100644
--- a/VAR.Toolbox/UI/FrmProxyCmd.cs
+++ b/VAR.Toolbox/UI/FrmProxyCmd.cs
@@ -1,27 +1,17 @@
using System;
-using System.Data.SqlClient;
using System.Threading;
using System.Windows.Forms;
+using VAR.Toolbox.Code;
namespace VAR.Toolbox.UI
{
- public partial class FrmProxyCmd : Form
+ public partial class FrmProxyCmd : Form, IOutputHandler
{
public FrmProxyCmd()
{
InitializeComponent();
}
-
- private void txtOutput_AppendLine(string line)
- {
- BeginInvoke(new MethodInvoker(delegate
- {
- txtOutput.AppendText(line);
- txtOutput.AppendText(Environment.NewLine);
- Application.DoEvents();
- }));
- }
-
+
private object _executionLock = new object();
private void txtInput_KeyDown(object sender, KeyEventArgs e)
@@ -32,17 +22,27 @@ namespace VAR.Toolbox.UI
Application.DoEvents();
return;
}
-
if (e.KeyCode == Keys.Return)
{
e.Handled = true;
- Application.DoEvents();
string cmd = txtInput.Text.Replace("\n", "").Replace("\r", "");
- txtOutput_AppendLine(cmd);
txtInput.Text = string.Empty;
+ Application.DoEvents();
+ txtInput.Text = string.Empty;
+ OutputLine(cmd);
new Thread(() => ExecuteCmd(cmd)).Start();
return;
}
+ if(e.KeyCode == Keys.Enter)
+ {
+ e.Handled = true;
+ return;
+ }
+ if (e.KeyCode == Keys.LineFeed)
+ {
+ e.Handled = true;
+ return;
+ }
if (e.KeyCode == Keys.Up)
{
e.Handled = true;
@@ -55,22 +55,35 @@ namespace VAR.Toolbox.UI
}
}
+ private IProxyCmdExecutor _proxyCmdExecutor = null;
+
private void ExecuteCmd(string cmdString)
{
- Monitor.Enter(_executionLock);
- SqlConnection cnx = new SqlConnection(Properties.Settings.Default.ProxyCmdConfig);
- SqlCommand cmd = cnx.CreateCommand();
- cmd.CommandText = "exec master.dbo.xp_cmdshell @cmd";
- cmd.Parameters.Add(new SqlParameter("cmd", cmdString));
- cnx.Open();
- SqlDataReader reader = cmd.ExecuteReader();
- while (reader.Read())
+ if (_proxyCmdExecutor == null)
{
- string output = Convert.ToString(reader[0]);
- txtOutput_AppendLine(output);
+ _proxyCmdExecutor = ProxyCmdExecutorFactory.CreateFromConfig(Properties.Settings.Default.ProxyCmdConfig);
+ }
+ Monitor.Enter(_executionLock);
+ try
+ {
+ _proxyCmdExecutor.ExecuteCmd(cmdString, this);
+ }
+ catch (Exception ex)
+ {
+ Logger.Log(ex);
+ OutputLine(ex.Message);
}
- cnx.Close();
Monitor.Exit(_executionLock);
}
+
+ public void OutputLine(string line)
+ {
+ BeginInvoke(new MethodInvoker(delegate
+ {
+ txtOutput.AppendText(line);
+ txtOutput.AppendText(Environment.NewLine);
+ Application.DoEvents();
+ }));
+ }
}
}
diff --git a/VAR.Toolbox/VAR.Toolbox.csproj b/VAR.Toolbox/VAR.Toolbox.csproj
index 7bda487..b3954b7 100644
--- a/VAR.Toolbox/VAR.Toolbox.csproj
+++ b/VAR.Toolbox/VAR.Toolbox.csproj
@@ -84,8 +84,13 @@
+
+
+
+
+