要从 Windows 操作系统请求提升,您必须在应用程序中包含清单:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- Leave the desired execution level here -->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false">
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
执行级别定义如下(取自MSDN here):
asInvoker:应用程序将以与启动它的进程相同的权限运行。通过选择以管理员身份运行,可以将应用程序提升到更高的权限级别。
highestAvailable:应用程序将以最高权限级别运行。如果启动应用程序的用户是 Administrators 组的成员,则此选项与 requireAdministrator 相同。如果最高可用权限级别高于开启进程的级别,系统会提示输入凭据。
requireAdministrator:应用程序将以管理员权限运行。启动应用程序的用户必须是管理员组的成员。如果打开过程没有以管理权限运行,系统将提示输入凭据。
结论
要将值写入注册表,您可能应该包含<requestedExecutionLevel level="requireAdministrator" />
在清单中。但是也许您甚至不应该写信给HKEY_LOCAL_MACHINE
但是HKEY_CURRENT_USER
(请参阅此答案)。