我试图在远程机器(服务器)上执行.bat
文件,该文件结束进程并将用户从数据库系统中踢出。在服务器上执行时,文件正常工作并在客户端计算机上结束进程。
但是,当通过C#执行时,命令进入命令提示符并且无法执行。这是.bat
文件;
psexec \\lp-100 msg * Hi Dan - your being removed!
pskill \\lp-100 sdcdatabase.vshost.exe
pause
在C#中执行时出现问题,这是错误消息:
这让我相信实际上.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
?
答案 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);
}