Как я узнаю, выполняет ли процесс уже использование c#?

Или очевидная кнопка «всегда возобновлять», которая однажды нажата, просто пробьет себе путь через любую из заблокированных точек останова?

blockquote>

Нажмите и удерживайте Resume нажмите кнопку и выберите Принудительное выполнение сценария . Примечание: я не говорю, что это очевидно, но я думаю, что это то, что вы хотите.

force resume

Кнопка Деактивировать точки останова также может работать.

deactivate

25
задан csjohnst 9 September 2008 в 02:54
поделиться

8 ответов

Это должно сделать это для Вас.

Процессы Проверки

//Namespaces we need to use
using System.Diagnostics;

public bool IsProcessOpen(string name)
{
    //here we're going to get a list of all running processes on
    //the computer
    foreach (Process clsProcess in Process.GetProcesses()) {
        //now we're going to see if any of the running processes
        //match the currently running processes. Be sure to not
        //add the .exe to the name you provide, i.e: NOTEPAD,
        //not NOTEPAD.EXE or false is always returned even if
        //notepad is running.
        //Remember, if you have the process running more than once, 
        //say IE open 4 times the loop thr way it is now will close all 4,
        //if you want it to just close the first one it finds
        //then add a return; after the Kill
        if (clsProcess.ProcessName.Contains(name))
        {
            //if the process is found to be running then we
            //return a true
            return true;
        }
    }
    //otherwise we return a false
    return false;
}


32
ответ дан 28 November 2019 в 18:10
поделиться

Можно использовать LINQ также,

var processExists = Process.GetProcesses().Any(p => p.ProcessName.Contains("<your process name>"));
22
ответ дан 28 November 2019 в 18:10
поделиться

Я использовал функцию AppActivate во времени выполнения VB для активации существующего процесса. Необходимо будет импортировать Microsoft. VisualBasic dll в проект C#.

using System;
using System.Diagnostics;
using Microsoft.VisualBasic;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] proc = Process.GetProcessesByName("notepad");
            Interaction.AppActivate(proc[0].MainWindowTitle);
        }
    }
}
6
ответ дан 28 November 2019 в 18:10
поделиться

Можно просто перечислить процессы с помощью Процесс. Метод GetProcesses .

4
ответ дан 28 November 2019 в 18:10
поделиться

Я думаю, что полный ответ на Вашу проблему требует понимания того, что происходит, когда Ваше приложение решает, что экземпляр foo.exe уже работает т.е. что делает '//TODO: Переключитесь на процесс foo.exe, на самом деле означают?

1
ответ дан 28 November 2019 в 18:10
поделиться

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

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

кроме того, у меня был доступ исходного кода к процессу, который я пытался запустить. Если Вы не можете изменить код, добавив, что взаимное исключение является, очевидно, не опцией.

1
ответ дан 28 November 2019 в 18:10
поделиться

Две проблемы для учета:

  1. Ваш пример включил размещение пароля на командной строке. То представление открытого текста секрета могло быть уязвимостью системы обеспечения безопасности.

  2. При перечислении процессов, спросите себя, которые обрабатывают Вас, действительно хотят перечислить. Все пользователи, или просто текущий пользователь? Что, если текущий пользователь зарегистрирован дважды (два рабочих стола)?

1
ответ дан 28 November 2019 в 18:10
поделиться

Mnebuerquo записал:

кроме того, у меня был доступ исходного кода к процессу, который я пытался запустить. Если Вы не можете изменить код, добавив, что взаимное исключение является, очевидно, не опцией.

у меня нет доступа исходного кода к процессу, который я хочу выполнить.

я закончил тем, что использовал proccess MainWindowHandle для переключения на процесс, как только я нашел, что это - выполнение alread:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
 public static extern bool SetForegroundWindow(IntPtr hWnd);
0
ответ дан 28 November 2019 в 18:10
поделиться
Другие вопросы по тегам:

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