Как я могу программно отредактировать файл hosts в Windows 7/серверах 2008?

Я пишу немного утилиты WPF для управления записями в файле hosts в dev целях. Поскольку Вы могли бы знать, что файл hosts защищен более новым OSs (Win 7/2008/Vista).

Я добавил декларацию к своему приложению для установки requestedExecutionLevel на "requireAdministrator", как детализировано здесь (использующий "простой способ") и в связанном вопросе здесь.

К сожалению, это не работало на меня. Нет никакой подсказки повышения, когда я запускаю приложение и вызов Файла. AppendText для файла hosts все еще вызывает Систему. UnauthorizedAccessException, который будет брошен: "Доступ к пути 'C:\Windows\System32\drivers\etc\hosts' запрещен".

HostsChanger.exe.manifest:





    
        
            
        
    


Какие-либо идеи?

8
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

Перефразируя мой предыдущий комментарий, превратился в ответ:

Ответ, который дал ho1, содержит app.manifest, который в точности совпадает с приложением, над которым я работаю на работе, и высота работает на это. Разница здесь в том, что имя файла - «app.manifest», а опция проекта «Манифест» (на вкладке «Приложение») указывает на него.

3
ответ дан 5 December 2019 в 22:16
поделиться

Не уверен, что это что-то изменит, но ваш фрагмент манифеста немного отличается от моего понимания того, как это должно быть (хотя это могут быть разные версии):

<?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";).

2
ответ дан 5 December 2019 в 22:16
поделиться

Я собираюсь сделать попытку и сказать, что это проблема с подписью аутенкода. Я не слышал, чтобы вы упоминали о подписи вашего приложения. Насколько я понимаю, в отличие от Vista, в Windows 2008/7 единственным способом запуска приложения с повышенными правами является подписанный манифест приложения, который определяет уровень привилегий, необходимый приложению. Если вам нужна помощь в подписании, вот статья о том, как подписать свое приложение: http://msdn.microsoft.com/en-us/library/bb756995.aspx

1
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: