Как определить, что вызывает ограничения контроля доступа пользователей? - PullRequest
1 голос
/ 05 марта 2010

В приложении Delphi, предназначенном для создания службы обновления программного обеспечения для моего программного обеспечения через Интернет, система контроля учетных записей Windows 7 запрашивает у пользователя разрешение на запуск exe. В коде присутствуют следующие возможные спорные области / риски:

  • Для связи создан именованный сервер каналов
  • TCP используется для FTP и HTTP
  • используется вызов API SHGetSpecialFolderPath

До того, как эти элементы, где добавленное UAC не активировалось, удаляя каждый по очереди, включая все ссылки на юниты, а затем заканчивая «пустыми» файлами, по-прежнему вызывают событие UAC - поэтому невозможно сказать, что его вызывает. Вдобавок к этому Delphi 2007 теперь требует запуска от имени администратора для запуска процесса отладки приложения.

Вопрос 1: Как я могу увидеть, что вызывает это, кроме как начать с нуля в новом exe - IOW, есть ли где-нибудь журнал, который я могу проверить

Вопрос 2. Будет ли при использовании подписанного exe-файла, использующего authenticode, предупреждение UAC показывать

Ответы [ 2 ]

7 голосов
/ 05 марта 2010

UAC не запускается, потому что ваше приложение выполняет административные функции. Многие люди считают, что когда приложение, которое не имеет повышенных прав, пытается выполнить [что-то, что не может быть повышено, а затем успешно повышено], UAC запрашивает повышение. Но это не так. Ваше приложение начинается с повышенного уровня или нет и остается таким же. Если он пытается сделать что-то, что терпит неудачу без повышения прав, то это не помогает. Вот почему добавление и удаление кода «все еще вызывает событие UAC».

То, что действительно «вызывает событие UAC», является свойством вашего exe-файла, отличного от кода, который он содержит. К ним относятся его имя, материал для обеспечения совместимости, который вы намеренно применили (щелкнув правой кнопкой мыши и отметив некоторые параметры), и материал для обеспечения совместимости, который система применила к нему для вас (часто после одного из тех диалогов «это приложение могло работать неправильно»). Людям часто бывает очень сложно определить, что из этого вызывает.

Начните с переименования exe, избегая таких слов, как настройка и обновление. Вам не нужно запускать его, между прочим - просто найдите наложение щита на значок в проводнике Windows. (см. http://www.gregcons.com/KateBlog/NamingMattersAnotherCauseOfTheOverlayIcon.aspx) Также щелкните правой кнопкой мыши и выберите «Свойства», затем посмотрите на вкладку «Совместимость». Возможно, вас просят повысить ее там.

3 голосов
/ 22 апреля 2010

Я думаю, что вы задаете неправильный вопрос.

Вам не нужно бороться с UAC и его эвристикой. Это хаки совместимости для старых приложений, а не новые. Новые приложения должны просто следовать правилам.

Включите манифест с уровнем выполнения asInvoker - и все готово. Простой и эффективный на 100%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...