Member 13135651 Ответов: 2

Как обработать исключение system.componentmodel.win32exception: "доступ запрещен"?


Я разработал приложение wpf, где я хочу управлять отдельными экземплярами приложений, и мое требование состоит в том, чтобы убить старые экземпляры и позволить новым экземплярам выполняться дальше.
я попробовал ниже код, но я получил систему.ComponentModel.Win32Exception: ошибка "Доступ запрещен" при вызове runningProcess.Метод Kill()

Что я уже пробовал:

[STAThread]
public static void Main()
{
    Process[] localByName = Process.GetProcessesByName("faceme");
    Process currentProcess = Process.GetCurrentProcess();
    int nProcessID = Process.GetCurrentProcess().Id;

    var runningProcess = (from process in Process.GetProcesses()
                          where
                            process.Id != currentProcess.Id &&
                            process.ProcessName.Equals(
                              currentProcess.ProcessName,
                              StringComparison.Ordinal)
                          select process).FirstOrDefault();

        if (runningProcess != null)
        {
            runningProcess.Kill();
        }

    MyApp.App app = new MyApp.App();
    app.InitializeComponent();
    app.Run();
}

PureNsanity

Я собираюсь сделать предположение... Это потому, что приложение не закрывается должным образом? И вы хотите убить любое застрявшее/зависшее приложение при запуске нового экземпляра?

2 Ответов

Рейтинг:
1

Dave Kreskowiak

Вы пытаетесь убить процесс, на который у вас нет прав. Есть также системные процессы, которые даже администратор не может убить.

Нет никакого способа обойти это.


Рейтинг:
0

Member 13135651

[DllImport("user32.dll")]
из какого метода мне нужно выйти user32.dll для процесса.Убивать();

OriginalGriff

Ты хочешь:

[Атрибута DllImport(ExternDll.На Kernel32, Кодировка=Система.Во время выполнения.InteropServices.кодировка.Auto, SetLastError=true)]
публичный статический модификатор extern bool при помощи terminateprocess(processHandle SafeProcessHandle, тип int exitcode содержит);

Но... это ничего не изменит.
Прочтите, что говорится в ссылке.