我有一个奇怪的问题。 我写了一个WinForm的服务器应用程序和WinForm的客户端应用程序。 客户端的作用是发送命令来运行某个脚本到服务器。 服务器接收这些命令,分析它们,并运行它们。
这两个工作的伟大。
我写它使用某些功能,从我的客户端应用程序CMD。 此应用程序应该作为一个cmd客户端。
问题是这样的:当我运行WinForm的客户端,服务器运行与完全没有问题的命令。 当我运行CMD客户端,当服务器尝试执行接收到的命令时,Windows在服务器端弹出的脚本是否可以运行或没有安全问题(见所附图片)。
它为什么会发生在cmd中,而不是在的WinForms。
这里是我的代码:
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);
}
}
}
}
有任何想法吗?