Проверьте, работает ли приложение на сетевом ПК - PullRequest
4 голосов
/ 29 июля 2011

У меня есть приложение C #, работающее до некоторой степени.Что мне нужно сделать, это продолжить выполнение, если на компьютере (с учетом IP-адреса) запущено приложение (TEKBSS.exe).Как я могу это сделать?Кто-нибудь может мне помочь?

Ответы [ 4 ]

6 голосов
/ 29 июля 2011

Вы можете сделать это через WMI .Вам понадобятся соответствующие учетные данные для доступа к удаленному компьютеру.

Пространство имен System.Management включает в себя функции для использования WMI из C #.

Вот, пожалуйста,

        // 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.

3 голосов
/ 29 июля 2011

Вы можете использовать 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);
    }
}
0 голосов
/ 29 июля 2011

Просмотр:

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

    }
}
0 голосов
/ 29 июля 2011

Я знаю, что это .net код.Но я использовал это некоторое время назад, чтобы сделать то же самое.Надеюсь, это даст вам идею, и я постараюсь преобразовать.Пока у вас есть права доступа, вы можете выполнять команду pushd в своем коде.Вы можете сначала попытаться выполнить из командной строки, чтобы убедиться, что вы можете войти.

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 для вас.Я немного отредактирую.

РЕДАКТИРОВАТЬ

Ссылка на выполнение команд в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...