此问题适用于Windows Vista!
我有一个通常无需管理权限的应用程序.有一个活动确实需要管理权限但我不想以更高的权限启动应用程序本身,因为我知道大部分时间用户甚至不使用该功能.
我正在考虑某种方法,通过该方法,我可以在某些事件上提升应用程序的权限(例如按下按钮).例:

如果用户单击此按钮,则会提示他使用UAC对话框或同意.我怎样才能做到这一点?
我有一个Windows服务尝试写入LOCAL_MACHINE中的注册表项
密钥是作为Windows安装程序包的一部分创建的,它控制着Windows服务和独立的控制窗口.
控制窗口可以正常读取和写入注册表项,但即使我授予LOCAL SERVICE完全权限,也无法写入注册表项.
这是抛出异常的代码:
private void updateLocalRegistryVersion(Double newVersion)
{
RegistryKey rk = Registry.LocalMachine;
RegistryKey sk = rk.OpenSubKey(@"Software\CompanyName\Monitoring\Values");
sk.SetValue("scriptversion", newVersion.ToString());
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
以下代码对我不起作用:
public bool createRegistry()
{
if (!registryExists())
{
Microsoft.Win32.Registry.LocalMachine.CreateSubKey("Software\\xelo\\");
Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\xelo").SetValue("hostname", (string)hostname, Microsoft.Win32.RegistryValueKind.String);
return true;
}
else
{
return updateRegistry();
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
System.UnauthorizedAccessException | "无法写入注册表项"
我正在编写一个小的WPF实用程序来管理hosts文件中的条目以用于开发目的.您可能知道主机文件受较新操作系统(Win 7/2008/Vista)的保护.
我添加了一个清单,以我的应用程序设置requestedExecutionLevel为"requireAdministrator",详见这里(用"最简单的方式"),并在相关的问题在这里.
不幸的是,这对我没用.启动应用程序时没有提升提示,并且为hosts文件调用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>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?