【发布时间】:2023-05-30 02:31:01
【问题描述】:
我有一个 C# 应用程序在某种程度上可以工作。如果计算机(给定 IP 地址)正在运行应用程序(TEKBSS.exe),我需要做的是继续执行。我怎样才能做到这一点?有人可以帮我吗?
【问题讨论】:
标签: c#
我有一个 C# 应用程序在某种程度上可以工作。如果计算机(给定 IP 地址)正在运行应用程序(TEKBSS.exe),我需要做的是继续执行。我怎样才能做到这一点?有人可以帮我吗?
【问题讨论】:
标签: c#
您可以通过WMI 执行此操作。您需要适当的凭据才能访问远程计算机。
System.Management 命名空间包括从 C# 使用 WMI 的功能。
给你:
// Don't forget...
// using System.Management; <-- Need to add a reference to System.Management, too.
ManagementScope scope = new ManagementScope(@"\\192.168.1.73\root\cimv2");
string query = "SELECT * FROM Win32_Process WHERE Name='TEKBSS.exe'";
var searcher = new ManagementObjectSearcher(query);
searcher.Scope = scope;
bool isRunning = searcher.Get().Count > 0;
范围告诉 WMI 在哪台机器上执行查询,所以不要忘记相应地更改 IP 地址。
然后,ManagementObjectSearcher 将向机器查询名称为 TEKBSS.exe 的所有进程的列表。
【讨论】:
您可以使用WMI 查询远程机器上的信息,例如正在运行哪些程序。
您需要引用System.Management.dll,并在远程计算机上拥有适当的权限才能访问 WMI。
using System;
using System.Linq;
using System.Management;
namespace Bling
{
public static void Main()
{
const string Host = "vmhost01";
const string Path = (@"\\" + Host + @"\root\CIMV2");
const string Exe = "TEKBSS.exe";
var queryString = string.Format("SELECT Name FROM Win32_Process WHERE Name = '{0}'", Exe);
var query = new SelectQuery(queryString);
var options = new ConnectionOptions();
options.Username = "Administrator";
options.Password = "*";
var scope = new ManagementScope(Path, options);
var searcher = new ManagementObjectSearcher(scope, query);
bool isRunnning = searcher.Get().Count > 0;
Console.WriteLine("Is {0} running = {1}.", Exe, isRunnning);
}
}
【讨论】:
查看:
System.Diagnostics.Process
Process p = new Process();
p.StartInfo.FileName = "TEKBSS.exe";
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
编辑:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Security;
public class MainClass
{
public static void Main()
{
Process[] allProcs = Process.GetProcesses("RemoteMachineOnYourNetwork");
foreach (Process p in allProcs)
Console.WriteLine(" -> {0} - {1}", p.ProcessName, p.PeakWorkingSet64);
}
}
【讨论】:
我知道这是 .net 代码。但我不久前用它来做同样的事情。希望它能给你一个想法,我会尝试转换。只要您有权限,您就可以在代码中执行命令pushd。您可以先尝试从命令行执行,以确保可以进入。
//pushes into the Given Machine on the C:\ and filters for your program
Dim sCommand as String = "pushd \\<MachineName>\C$ && tasklist.exe /FI ""IMAGENAME eq <NameOfExecutable>.exe""
//execute command from program
Shell("cmd.exe /c" & sCommand. AppWinStyle.Hide, True);
您很可能希望在返回计算机上的目录后执行popd。
让我看看我是否可以为你转换成 C。我稍后会编辑。
编辑
【讨论】: