Loading...
BraveFrontier avatar BraveFrontier 0 Точки

C# контролиране на стартираните процеси от апликация чрез PID и Control Tab-ове

Здравейте. Цял ден си напъвам мозъка да го измисля, но явно ще трябва да опирам до чужда помощ. Та така, какво искам да направя ?

Целта ми е да управлявам няколко стартирани процеса от една и съща апликация чрез PID.

Да речем, че апликацията се казва game.exe. В програмата имам бутон, който стартира апликацията. След като се стартира, програмата взема PID на стартирания процес и го извежда като име на първия Control Tab. PID на процеса се задава като стойност на static int променливата t1Pid за да мога да извиквам процеса по PID чрез отделните функции.

 

        private void button1_Click(object sender, EventArgs e)
        {
            bool started = false;
            var p = new Process();

            p.StartInfo.FileName = "game.exe";

            started = p.Start();

            try
            {
                var procId = p.Id;
                tabControl1.TabPages.Add(Convert.ToString(procId));

                    t1Pid = procId;

            }
            catch (InvalidOperationException)
            {
                started = false;
                MessageBox.Show("Invalid operation ex");
            }
            catch (Exception ex)
            {
                started = false;
                MessageBox.Show("Exception ex");
            }
        }

Имам 2 бутона.
Първия бутон стартира процеса както се вижда от кода по-горе.

Сега да речем, че пуснем 3 процеса game.exe и програмата ни се добавят 3 Control Tab-а (пример: 4906 | 9066 | 7522).
Се да кажем, че затворя един от 3-те процеса (този с PID 7522).

Като натисна втория бутон трябва по някакъв начин програмата да се ориентира кой от стартираните процеси (PID) вече го няма и съответно да затвори неговия Control Tab.

Благодаря!

Тагове:
0
Module: C# Advanced
AlucardDracula avatar AlucardDracula 416 Точки

Може би това търсиш: ЛИНК, но не съм сигурен.

може да проваш да записваш тези PID на масив (или по-добра идея май ще е речник) и да ги даваш на таб-а, после като изтриеш от таб-а, изтриваш го и от масива. Все пак е идея може би програмата ти е с друг логичен принцип. Ако си качил проекта в github дай линк за да успеем да помогнем по-добре.

0
kolioi avatar kolioi 641 Точки

Понеже първо натискаш бутон и тогава проверяваш кои от стартираните процеси все още са активни, този код ще ти свърши работа

process.Refresh();
if(process.HasExited)
{
    tabControl1.TabPages.Remove(t1Pid.ToString());
}

process е всеки един от стартираните процеси. Ако искаш обаче програмата ти да получава съобщение ако някой от процесите е приключил и автоматично да затваря съответния tab, трябва да изпозваш събитието process.Exited, виж този пример.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.