I have a strange question. I wrote a winform server application and a winform client application. The role of the client is to send commands to run a specific script on the server. The server receives these commands, analyzes them, and starts them.
These two work perfectly.
I wrote a cmd application that uses some features of my client. This application should work as a CMD client.
The question arises: when I start the winform client, the server runs the commands without any problems. When I run the cmd client, when the server tries to execute the received command, Windows on the server side raises a security question about whether the script can be run or not (see the attached image).
Why is this happening on cmd and not on winforms.
Here is my code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Win32; using System.Net.Sockets; using System.ComponentModel; using System.IO; using System.Management; namespace RemoteBatcher { class ClientCmdProgram { private static RegistryKey registryKey; private static Socket clientSock; private static string remoteIpAddress = "192.168.0.1"; private static int remotePort = 8; private static string userName = ""; private static string targetPath = "Z:\\nBatcher\\"; private static List<string> listOfCommands = new List<string>(); static void Main(string[] args) { var backgroundWorker = new BackgroundWorker(); userName = RemoteUtils.getConnectedUser(); registryKey = Registry.CurrentUser.OpenSubKey("Key"); if (registryKey == null) { Console.WriteLine("Error! No Saved Data Was Found In The Registry. Please Run The RemoteBatcherClient App First."); Environment.Exit(1); } if (!connectToServer(backgroundWorker)) Environment.Exit(1); getCommandsList(); sendCommands(backgroundWorker); } private static bool connectToServer(BackgroundWorker backgroundWorker) { try { clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSock.Connect(remoteIpAddress, remotePort); backgroundWorker.DoWork += (sender1, e1) => RemoteUtils.copyDllsToServer(targetPath += userName); backgroundWorker.RunWorkerAsync(); } catch (Exception ex) { Console.Write(ex.Message); return false; } return true; } private static void getCommandsList() { string[] commandsInRegistry = registryKey.GetValueNames(); for (int i = 0; i < commandsInRegistry.Length; i++) { listOfCommands.Add(registryKey.GetValue(commandsInRegistry[i]).ToString()); } } private static void sendCommands(BackgroundWorker backgroundWorker) { int flicker = 100; int counter = 100; try { while (backgroundWorker.IsBusy) { if (counter == flicker) { counter = 1; Console.WriteLine("Copying Executable Files, Please Wait.."); } else if (counter == 50) { Console.Clear(); } else counter++; } for (int i = 0; i < listOfCommands.Count; i++) { clientSock.Send(Encoding.Default.GetBytes(listOfCommands[i] + " <eom> ")); } clientSock.Close(); clientSock.Dispose(); } catch (Exception ex) { Console.Write(ex.Message); Environment.Exit(1); } } } }
Any ideas?
source share