none
Автозапускатор RRS feed

  • Вопрос

  • Всем доброго времени суток,

    как проследить за процессом, то есть узнать работает он или нет?

    точнее имеется процесс "SER" , и как сделать индикатор его активности

    то есть

    if(/****определяем работает ли "SER"*****/) {

    textbox.text = "Its work";

    }

     

    • Изменено Sharp1195 15 ноября 2011 г. 5:40
    15 ноября 2011 г. 5:37

Ответы

  • > вызова функции Process.GetProcessesByName, например раз в секунду. [...] а как?

     

    using System.Diagnostics;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication0
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                new Button { Parent = this, Text = "Start", Location = new Point(10, 40) }
                    .Click += (s, e) =>
                    {
                        if (IsActive("Notepad") == false)
                            Process.Start("Notepad");
                    };
    
                var tb = new TextBox { Parent = this, Dock = DockStyle.Top };
    
                new Timer { Interval = 1000, Enabled = true }
                    .Tick += (s, e) =>
                    {
                        tb.Text = this.IsActive("Notepad") ? "работает" : "";
                    };
            }
    
            bool IsActive(string pname)
            {
                var ps = Process.GetProcessesByName(pname);
                return (ps.Length > 0);
            }
        }
    }
    
    
    

    • Предложено в качестве ответа Abolmasov Dmitry 16 ноября 2011 г. 8:35
    • Помечено в качестве ответа Abolmasov Dmitry 14 декабря 2011 г. 19:12
    16 ноября 2011 г. 8:22

Все ответы

  • > как проследить за процессом, то есть узнать работает он или нет?

     

    см. Process.GetProcessesByName

     
    15 ноября 2011 г. 6:26
  • В if не ложиться, что делать?

    и еще вопрос он постоянно проверяет или надо водить wait?

    15 ноября 2011 г. 6:31
  • > и еще вопрос он постоянно проверяет или надо водить wait?

     
     
    если требуется монитор процессов, то можно спользовать WMI
    примерно так.

    using System;
    using System.Management;
    using System.Windows;
    
    namespace WpfApplication6
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                Action<string> cb = pid => 
                    rtb.AppendText(pid + Environment.NewLine);
    
                var query = new WqlEventQuery(
                    "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'");
                var watcher = new ManagementEventWatcher(
                    new ManagementScope(ManagementPath.DefaultPath), query);
                watcher.EventArrived += (ws, we) =>
                {
                    var mo = we.NewEvent["TargetInstance"] as ManagementBaseObject;
                    var pid = Convert.ToString(mo.GetPropertyValue("ProcessId"));
                    this.Dispatcher.BeginInvoke(cb, pid);
                };
                watcher.Start();
                this.Closing += (ws, we) => watcher.Stop();
            }
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                System.Diagnostics.Process.Start("notepad");
            }
        }
    }
    
    
    <Window x:Class="WpfApplication6.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525"
            Topmost="True">
        <StackPanel>
            <Button Content="Run Notepad" Click="Button_Click" HorizontalAlignment="Left" />
            <RichTextBox x:Name="rtb" />
        </StackPanel>
    </Window>
    
    


     
    свойства Win32_Process см. здесь


     

    15 ноября 2011 г. 12:01
  • выражусь так

     

    if (procces.worked"ser"){
        textbox.text = "Ser work";
    }
    else
    {
         Process.Start("Ser");
    }
    Надо так
    15 ноября 2011 г. 16:48
  • > if (procces.worked"ser"){ ...

     
        

    using System.Diagnostics;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication0
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                new Button { Parent = this, Text = "Start", Location = new Point(10, 40) }
                    .Click += (s, e) =>
                    {
                        var ps = Process.GetProcessesByName("Notepad");
                        if (ps.Length == 0)
                            Process.Start("Notepad");
                    };
            }
        }
    }
    

    15 ноября 2011 г. 18:52
  • > if (procces.worked"ser"){ ...

     
        

     

    using System.Diagnostics;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication0
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                new Button { Parent = this, Text = "Start", Location = new Point(10, 40) }
                    .Click += (s, e) =>
                    {
                        var ps = Process.GetProcessesByName("Notepad");
                        if (ps.Length == 0)
                            Process.Start("Notepad");
                    };
            }
        }
    }
    

     

                        var ps = Process.GetProcessesByName("Notepad"); //обозначаем необходимый нам процесс переменой
                        if (ps.Length == 0) // Как понял если переменная не работает
                            Process.Start("Notepad");
    правильно понимаю?
    15 ноября 2011 г. 22:32
  • > (ps.Length == 0) // Как понял если переменная не работает
     

    ps - список процессов с именем Notepad. ps.Length - количество элементов в списке.
    == 0 - нет запущенных процессов.
    15 ноября 2011 г. 22:44
  • И вам нужно добавить таймер для периодической проверки работы процесса, т.е. вызова функции Process.GetProcessesByName, например раз в секунду.


    Для связи [mail]
    16 ноября 2011 г. 6:53
  • И вам нужно добавить таймер для периодической проверки работы процесса, т.е. вызова функции Process.GetProcessesByName, например раз в секунду.


    Для связи [mail]
    Да что слышал, а как?
    16 ноября 2011 г. 8:11
  • > вызова функции Process.GetProcessesByName, например раз в секунду. [...] а как?

     

    using System.Diagnostics;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication0
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                new Button { Parent = this, Text = "Start", Location = new Point(10, 40) }
                    .Click += (s, e) =>
                    {
                        if (IsActive("Notepad") == false)
                            Process.Start("Notepad");
                    };
    
                var tb = new TextBox { Parent = this, Dock = DockStyle.Top };
    
                new Timer { Interval = 1000, Enabled = true }
                    .Tick += (s, e) =>
                    {
                        tb.Text = this.IsActive("Notepad") ? "работает" : "";
                    };
            }
    
            bool IsActive(string pname)
            {
                var ps = Process.GetProcessesByName(pname);
                return (ps.Length > 0);
            }
        }
    }
    
    
    

    • Предложено в качестве ответа Abolmasov Dmitry 16 ноября 2011 г. 8:35
    • Помечено в качестве ответа Abolmasov Dmitry 14 декабря 2011 г. 19:12
    16 ноября 2011 г. 8:22
  • > вызова функции Process.GetProcessesByName, например раз в секунду. [...] а как?

     

     

    using System.Diagnostics;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication0
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                new Button { Parent = this, Text = "Start", Location = new Point(10, 40) }
                    .Click += (s, e) =>
                    {
                        if (IsActive("Notepad") == false)
                            Process.Start("Notepad");
                    };
    
                var tb = new TextBox { Parent = this, Dock = DockStyle.Top };
    
                new Timer { Interval = 1000, Enabled = true }
                    .Tick += (s, e) =>
                    {
                        tb.Text = this.IsActive("Notepad") ? "работает" : "";
                    };
            }
    
            bool IsActive(string pname)
            {
                var ps = Process.GetProcessesByName(pname);
                return (ps.Length > 0);
            }
        }
    }
    
    
    

     

    как приручить скрипт на флажок?

    TextBox1 - Отображает нам что необходимо, SER.BAT -Приложение...

    19 ноября 2011 г. 22:50