Как избежать контроля учетных записей пользователей или запускать приложения Windows в Win7 всегда в режиме администратора - PullRequest
3 голосов
/ 09 января 2012

В приложении WinForms, когда мое приложение запускается, появляется диалоговое окно «Управление учетными записями пользователей» (только в Windows7).

Может кто-нибудь подсказать, насколько программно я могу этого избежать - то есть мое приложение должно всегда запускаться в админкережим или есть какой-либо вариант, чтобы остановить это диалоговое окно от появления?

Я разрабатываю в C #, VS2008.

Ответы [ 3 ]

10 голосов
/ 09 января 2012

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

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

2 голосов
/ 10 января 2012

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

Сначала добавьте файл манифеста в корень исполняемого проекта .NET - это можно сделать, выбрав «Добавить новый элемент» и выбрав «Файл манифеста приложения».Или просто создайте пустой файл с именем «app.manifest».Стандартный шаблон, который предоставляет вам Visual Studio, выглядит следующим образом:

<?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="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Ключевой частью является режим запрашиваемого исполнения - уровень по умолчанию, для которого по умолчанию установлено значение «asInvoker».Это означает, что приложение будет работать под привилегиями того, кто его запускал, - помня, что в UAC даже администраторы Windows Vista работают как пользователи, пока они не повышают свои разрешения.

Если ваше приложение всегда требует привилегий администратора, тоВы можете изменить это значение на «requireAdministrator».Теперь, когда ваше приложение запускается, оно всегда вызывает UAC и просит пользователя разрешить администратору доступ к вашей программе.

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

0 голосов
/ 01 декабря 2017

Вы можете просто удалить приглашение UAC, написав две строки кода,

Нажмите здесь

string UAC_key = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System";
Registry.SetValue(UAC_key, "EnableLUA", 0);`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...