Process.kill () запрещен в Windows 7 32 бита даже с правами администратора

Привет всем.

Я столкнулся со странной проблемой. Мое приложение имеет простой метод, который в случае, если IE входит в состояние, когда он перестает отвечать, этот метод запускается, закрывая все процессы IE ' s, а затем приложение возобновляет свою работу с IE.

Код метода:

foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())
{
     if (exe.ProcessName.StartsWith("iexplore"))
          exe.Kill();
}

Даже при отладке моего приложения с правами администратора приложение иногда запускает этот метод успешно, а иногда я получаю сообщение об ошибке Доступ запрещен даже работая в качестве администратора.

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

Код манифеста:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="Demo.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
    </application>
  </compatibility>
</asmv1:assembly>

У кого-то была такая же проблема перед? Как я могу исправить эту странную проблему.

Спасибо

6
задан Ani 9 September 2010 в 04:59
поделиться

3 ответа

Учитывая, что вы говорите, что всегда обладаете правами администратора, когда пытаетесь вызвать этот метод, следующее может объяснить, почему у вас возникают периодические проблемы:

System.Diagnostics.Process.Kill :

Если вызов метода Kill выполняется в то время, когда процесс в настоящее время завершается, возникает исключение Win32Exception для отказа в доступе.

Если вы дважды быстро нажали «удалить» + «ОК» для записи в Process-Explorer, вы поймете, о чем я говорю.

9
ответ дан 8 December 2019 в 15:58
поделиться

Обернули ли вы свой код в блок try/catch, чтобы проверить, не было ли выброшено исключение? Если нет, попробуйте

try
{            
    foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())   
    {   
        if (exe.ProcessName.StartsWith("iexplore"))   
            exe.Kill();   
    } 
}

catch (Win32Exception e)
{
    Console.WriteLine("The process is terminating or could not be terminated.");
}

catch (InvalidOperationException e)
{
    Console.Writeline("The process has already exited.");
}

catch (Exception e)  // some other exception
{
    Console.WriteLine("{0} Exception caught.", e);
}
5
ответ дан 8 December 2019 в 15:58
поделиться

Это особенность Internet Explorer, он запускает несколько процессов за один сеанс. Убийство одного из них может заставить их всех выйти. Вы, вероятно, видите исключение «процесс завершился». Вместо этого сделайте это так:

        foreach (var ie in Process.GetProcessesByName("iexplore")) { 
            try {
               ie.Kill();
            }
            catch {}
        }
1
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

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