2012-01-09 3 views
3

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

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

Я развиваюсь в C#, VS2008.

+0

Ваше приложение, вероятно, не должно быть причиной UAC подскажете на всех! Обычно это означает, что приложение делает что-то глупое, как запись файла журнала в папку C: \ Windows или подобное. – MattDavey

+0

MattDavey в моем приложении Я не пишу ни одного файла журнала. –

ответ

10

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

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

2

Если вы ориентируетесь на 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> 

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

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

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

+1

Roget Я сделал то же самое, что и вы написал. В файле манифеста приложения я добавил внутри тега requestExecutionLevel level = «highAvailable». Я не внес изменений в другие места, но он не работает (то есть появляется окно сообщений UAC). Пожалуйста помоги. –

+0

После создания манифеста, когда я запускаю приложение, появляются следующие диалоги. Эта задача требует, чтобы приложение обладало повышенными разрешениями. Зачем нужен администратор или другая учетная запись? Перезагрузите с помощью разных учетных данных. –

0

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

Click Here

string UAC_key = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; 
Registry.SetValue(UAC_key, "EnableLUA", 0);` 
+0

Укажите описание ссылки. – Vagish

Смежные вопросы