在C#中的服务器上执行.bat文件

时间:2015-11-13 15:26:02

标签: c# windows batch-file cmd

我试图在远程机器(服务器)上执行.bat文件,该文件结束进程并将用户从数据库系统中踢出。在服务器上执行时,文件正常工作并在客户端计算机上结束进程。

但是,当通过C#执行时,命令进入命令提示符并且无法执行。这是.bat文件;

psexec \\lp-100 msg * Hi Dan - your being removed!

pskill \\lp-100 sdcdatabase.vshost.exe

pause

在C#中执行时出现问题,这是错误消息:

enter image description here

这让我相信实际上.bat文件没有在服务器上执行(确实安装了PsTools),而是将内容复制并执行客户端机器。

以下是我用来执行.bat文件的代码;

Process proc = null;
try
{
    string batDir = string.Format(@"\\hqdb1\sdc_sqldb\pstools\");
    proc = new Process();
    proc.StartInfo.WorkingDirectory = batDir;
    proc.StartInfo.FileName = "removeuser.bat";
    proc.StartInfo.CreateNoWindow = false;
    proc.Start();
    proc.WaitForExit();
    MessageBox.Show("Bat file executed !!");
}
catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace.ToString());
}

这是执行服务器上的.bat文件,关闭客户端,还是在客户端上执行而没有找到PsTools

1 个答案:

答案 0 :(得分:0)

多年前我编写了这段代码,试试它是否还在运行:

ConnectionOptions options = new ConnectionOptions();
options.Password = args[2];
options.Username = args[1];
string machine= args[0];

ManagementScope scope = new ManagementScope();
scope.Options = options;
scope.Path = new ManagementPath(@"\\" + machine + @"\root\cimv2");
scope.Connect();

ObjectQuery query = new ObjectQuery("Select * from Win32_Process Where Name     = '" + args[3] + "'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
    object y = m.GetPropertyValue("ProcessID");
    int pID = Convert.ToInt32(y);
    m.InvokeMethod("Terminate", null);
}