Я пишу немного утилиты WPF для управления записями в файле hosts в dev целях. Поскольку Вы могли бы знать, что файл hosts защищен более новым OSs (Win 7/2008/Vista).
Я добавил декларацию к своему приложению для установки requestedExecutionLevel на "requireAdministrator", как детализировано здесь (использующий "простой способ") и в связанном вопросе здесь.
К сожалению, это не работало на меня. Нет никакой подсказки повышения, когда я запускаю приложение и вызов Файла. AppendText для файла hosts все еще вызывает Систему. UnauthorizedAccessException, который будет брошен: "Доступ к пути 'C:\Windows\System32\drivers\etc\hosts' запрещен".
HostsChanger.exe.manifest:
Какие-либо идеи?
Перефразируя мой предыдущий комментарий, превратился в ответ:
Ответ, который дал ho1, содержит app.manifest, который в точности совпадает с приложением, над которым я работаю на работе, и высота работает на это. Разница здесь в том, что имя файла - «app.manifest», а опция проекта «Манифест» (на вкладке «Приложение») указывает на него.
Не уверен, что это что-то изменит, но ваш фрагмент манифеста немного отличается от моего понимания того, как это должно быть (хотя это могут быть разные версии):
<?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="HostsChanger" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
В противном случае, можно обойтись отдельным приложением "Loader", которое запускается пользователем и которое запускает только ваш настоящий WPF инструмент, используя Verb
runas
, как подробно описано в этой статье блога (так Process. StartInfo.Verb = "runas";
).
Я собираюсь сделать попытку и сказать, что это проблема с подписью аутенкода. Я не слышал, чтобы вы упоминали о подписи вашего приложения. Насколько я понимаю, в отличие от Vista, в Windows 2008/7 единственным способом запуска приложения с повышенными правами является подписанный манифест приложения, который определяет уровень привилегий, необходимый приложению. Если вам нужна помощь в подписании, вот статья о том, как подписать свое приложение: http://msdn.microsoft.com/en-us/library/bb756995.aspx