8

我正在编写一个小 WPF 实用程序来管理主机文件中的条目以用于开发目的。您可能知道主机文件受较新的操作系统(Win 7/2008/Vista)保护。

我已在我的应用程序中添加了一个清单,以将 requestedExecutionLevel 设置为“requireAdministrator”,详见此处(使用“简单方法”)和此处的相关问题。

不幸的是,这对我不起作用。当我启动应用程序时没有提升提示,并且为主机文件调用 File.AppendText 仍然会导致 System.UnauthorizedAccessException 被抛出:“访问路径 'C:\Windows\System32\drivers\etc\hosts' 是否认。”

HostsChanger.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="HostsChanger" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

有任何想法吗?

4

3 回答 3

3

从我之前的评论中转述,变成了一个答案:

ho1 给出的答案包含一个 app.manifest,它与我在工作中正在开发的应用程序完全相同,并且提升正在为它工作。这里的区别在于文件名是“app.manifest”,而项目选项“Manifest”(在“应用程序”选项卡上)指向它。

于 2010-07-08T17:18:45.187 回答
2

我不确定它是否会有所不同,但您的清单片段与我对它应该如何的理解略有不同(尽管可能是不同的版本):

<?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>

否则,解决方法可能是拥有一个单独的“加载器”应用程序,用户可以使用该应用程序启动该应用程序,并且该应用程序仅使用博客文章Verb runas中详述的方法启动您的真正 WPF 工具(so )。Process.StartInfo.Verb = "runas";

于 2010-07-07T09:37:24.513 回答
1

我将在这里暗中尝试,并说这是一个验证码签名问题。我没有听到你提到任何关于签署你的申请的事情。据我了解,与 Vista 不同,在 Windows 2008/7 中运行提升的应用程序的唯一方法是拥有一个签名的应用程序清单,该清单标识应用程序所需的特权级别。如果您需要签名方面的帮助,这里有一篇关于如何为您的应用程序签名的文章:http: //msdn.microsoft.com/en-us/library/bb756995.aspx

于 2010-07-08T14:28:21.137 回答