Если вы ориентируетесь на 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 предоставляет область профиля пользователя и реестр только для этой цели. В целом ОАК, мы надеемся, заставит нас всех подумать немного более внимательно о том, где мы храним данные, и какие разрешения для приложения действительно нужны.
Ваше приложение, вероятно, не должно быть причиной UAC подскажете на всех! Обычно это означает, что приложение делает что-то глупое, как запись файла журнала в папку C: \ Windows или подобное. – MattDavey
MattDavey в моем приложении Я не пишу ни одного файла журнала. –