Vista: может ли EXE обойти подтверждение пользователя при вызове другого EXE-файла? - PullRequest
2 голосов
/ 18 июня 2009

У меня есть 2 приложения, написанные на Delphi. Первый exe (с пользовательским интерфейсом) вызывает другого, используя ShellExecuteEx (), который запускается как фоновый процесс.

Когда первый exe вызывает второй, происходит одна из этих двух вещей:

  1. Когда я вхожу в систему как администратор, появляется диалоговое окно UAC с подсказками «Разрешить / Отменить». Выбор Разрешить продолжает выполнение.

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

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

И да, я попытался применить смягчение ElevateCreateProcess, как это было предложено инструментом SUA, но, похоже, это не работает - поведение такое же, как и раньше.

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 19 июня 2009

Какое имя у вашего второго файла?

Vista предполагает, что для определенных имен файлов требуются права администратора - в первую очередь это файлы с именем «setup» или «install».

Кроме того: Если вы хотите, чтобы у вас была возможность запускать программу с правами администратора без Vista, выдает приглашение UAC, то вам не повезло. Это было бы серьезным нарушением безопасности, если бы это было возможно.

Вашей второй программе нужны права администратора?

Что происходит, когда вы пытаетесь выполнить вторую программу прямо из Проводника? UAC подскажите? Если это так, то Vista пытается запустить его с правами администратора либо из-за имени файла, либо из-за того, что запросы манифеста (внутренние или внешние) имеют вид.

1 голос
/ 18 июня 2009

Первый EXE должен быть запущен с повышенными привилегиями для вызова второго без запроса UAC. Или ... вы можете использовать манифест для второго EXE-файла, сообщающий Vista, что это не инструмент администратора, и просто запускаться как текущий пользователь.

Сохранено как Second.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Vista UAC Support -->
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
  <ms_asmv2:security>
    <ms_asmv2:requestedPrivileges>
      <ms_asmv2:requestedExecutionLevel level="asInvoker" />
    </ms_asmv2:requestedPrivileges>
  </ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>
0 голосов
/ 18 июня 2009

Да, вам понадобится манифест приложения, похожий на этот

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>   

    <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="UacTest"   type="win32"/>   
       <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">   
       <security>  
          <requestedPrivileges>  
             <requestedExecutionLevel level="highestAvailable"/>    
          </requestedPrivileges>  
       </security>  
    </trustInfo>  
  </assembly> 

Обратите внимание на тэг "requiredExecutionLevel"

...