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

C# 在C语言中的服务器上执行.bat文件#,c#,windows,batch-file,cmd,C#,Windows,Batch File,Cmd,我试图在远程机器(服务器)上执行.bat文件,该文件结束进程并将用户从数据库系统中踢出。在服务器上执行时,文件正常工作,并在客户端计算机上结束进程 但是,当通过C#执行时,命令会进入命令提示符,无法执行。这是.bat文件 psexec \\lp-100 msg * Hi Dan - your being removed! pskill \\lp-100 sdcdatabase.vshost.exe pause Process proc = null; try { string ba

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

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

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

pskill \\lp-100 sdcdatabase.vshost.exe

pause
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());
}
在C#中执行时会出现问题,这是错误消息:

这让我相信,实际上,
.bat
文件不是在服务器上执行的(服务器上安装了
PsTools
),而是在客户端机器上复制和执行内容

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

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

pskill \\lp-100 sdcdatabase.vshost.exe

pause
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

几年前我写了这段代码,如果它仍在工作,请尝试:

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);
}

它在客户端上执行。@RonBeyer,我如何在服务器上执行它?如果您使用的是PsTools,请使用它们在远程计算机上启动/终止进程。阅读更多关于PsTools的信息。不是答案,但你需要将信息改为“你是”,而不是“你的”。