Справка должна была получить идентификатор Процесса для PsExec.exe в C#?

Tkinter поддерживает механизм, названный обработчики протокола . Здесь, термин протокол относится к взаимодействию между приложением и менеджером окон. Обычно используемый протокол называют WM_DELETE_WINDOW и используют для определения то, что происходит, когда пользователь явно закрывает окно с помощью менеджера окон.

можно использовать protocol, метод к устанавливает обработчик для этого протокола (виджет должен быть Tk или Toplevel виджет):

Здесь у Вас есть конкретный пример:

import tkinter as tk
from tkinter import messagebox

root = tk.Tk()

def on_closing():
    if messagebox.askokcancel("Quit", "Do you want to quit?"):
        root.destroy()

root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()

6
задан 10 December 2009 в 09:35
поделиться

3 ответа

Попробуйте добавить параметр -d в командную строку PsExec.

Не ждите, пока приложение прекратить. Используйте эту опцию только для неинтерактивные приложения.

Это должно правильно вернуть идентификатор процесса в StandardError.

Пример:

ProcessStartInfo psi = new ProcessStartInfo(
    @"PsExec.exe",
    @"-d -i -u user -p password \\server C:\WINDOWS\system32\mspaint.exe")
                           {
                               UseShellExecute = false,
                               RedirectStandardOutput = true,
                               RedirectStandardError = true,
                               RedirectStandardInput = true,
                               WindowStyle = ProcessWindowStyle.Minimized,
                               CreateNoWindow = true
                           };
Process process = Process.Start(psi);

Console.WriteLine(process.StandardError.ReadToEnd());

Вывод:

PsExec v1.94 - Execute processes remotely
Copyright (C) 2001-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\WINDOWS\system32\mspaint.exe started with process ID 5896.
5
ответ дан 17 December 2019 в 04:47
поделиться

Я не думаю, что вы можете заставить PsExec возвращать pid так, как вы хотите.

Однако вы можете написать свою собственную начальную оболочку приложения в виде консольного приложения и вернуть ей pid. Затем вы можете заставить PsExec всегда запускать приложения, вызывая этот «AppStarter», таким образом возвращая ваш pid.

Что-то вроде:

namespace AppStarter
{
    class Program
    {
        static void Main(string[] args)
        {
            Process process = new Process();
            ProcessStartInfo psi = new ProcessStartInfo(args[0]);
            psi.UseShellExecute = false;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;
            psi.RedirectStandardInput = true;
            psi.Arguments = string.Join(" ", args, 1, args.Length - 1);
            process.StartInfo = psi;
            process.Start();
            Console.WriteLine("Process started with PID {0}", process.Id);
        }
    }
}

[это грубый и готовый пример, без обработки исключений и т. Д. - просто в качестве иллюстрации]

Ваш код, приведенный выше, теперь становится чем-то вроде

 Process process = new Process();
    ProcessStartInfo psi = new ProcessStartInfo(@"AppStarter.exe");
    psi.UseShellExecute = false;
    psi.RedirectStandardOutput = true;
    psi.RedirectStandardError = true;
    psi.RedirectStandardInput = true;
    psi.WindowStyle = ProcessWindowStyle.Minimized;
    psi.CreateNoWindow = true;
    psi.Arguments = @"PsExec.exe -i -u Username -p 26.06.08 \\server1,server2 C:\data\GridWorker\GridWorker.exe 100000";
    process.StartInfo = psi;
    process.Start();

    Console.WriteLine(process.StandardOutput.ReadToEnd());
0
ответ дан 17 December 2019 в 04:47
поделиться

Пока я недооценил первоначальный вопрос, задача состояла в том, чтобы получить PID запущенных повторно процессов на удаленных машинах. Это правда? В данном случае, ни один из ответов не является действительно полезным.

Вы должны создать WMI-запросы для каждого из ваших удаленных компьютеров, чтобы получить запущенные процессы. Это можно сделать с помощью классов "Win32_ProcessStartTrace".

Если вам нужна помощь, дайте мне знать.

br--mabra

.
0
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: