C# 我的应用程序如何在Windows 7中注册为浏览器?

C# 我的应用程序如何在Windows 7中注册为浏览器?,c#,.net,windows-7,registry,C#,.net,Windows 7,Registry,我已经编写了一个基于提供的URL启动浏览器的应用程序——其想法是,我有一些网站希望在IE中自动打开,而其余的应该在我的默认浏览器中打开。这东西运行得很好,所以现在我尝试将它注册为浏览器,以便将其设置为默认设置。我正试图通过应用程序本身来实现这一点 任务是写入HKLM\Software\Clients\StartMenuInternet(如文档所示),但一直失败。我的应用程序使用UAC执行以下技巧将自己提升为管理员: private static void EnsureElevatedInstal

我已经编写了一个基于提供的URL启动浏览器的应用程序——其想法是,我有一些网站希望在IE中自动打开,而其余的应该在我的默认浏览器中打开。这东西运行得很好,所以现在我尝试将它注册为浏览器,以便将其设置为默认设置。我正试图通过应用程序本身来实现这一点

任务是写入
HKLM\Software\Clients\StartMenuInternet
(如文档所示),但一直失败。我的应用程序使用UAC执行以下技巧将自己提升为管理员:

private static void EnsureElevatedInstall()
{
    using (var wi = WindowsIdentity.GetCurrent())
    {
        var wp = new WindowsPrincipal(wi);

        if (wp.IsInRole(WindowsBuiltInRole.Administrator)) return;

        using (var currentProc = Process.GetCurrentProcess())
        using (var proc = new Process())
        {
            proc.StartInfo.Verb = "runas";
            proc.StartInfo.FileName = currentProc.MainModule.FileName;
            proc.StartInfo.Arguments = "/reinstall";
            proc.Start();
        }

        Environment.Exit(0);
    }
}
这可以确保应用程序以管理员身份运行。我在启动流程时收到UAC提示。但是,当实际到了写注册表的时候,我得到一个异常,说我没有必要的权限

using (var registryKey = 
    Registry.LocalMachine.OpenSubKey(@"Software\Clients\StartMenuInternet"))
{
    const string launcherExecutable = "MyApp.exe";

    using(var launcherKey = registryKey.CreateSubKey(launcherExecutable))
    {
        // I never get here, because CreateSubKey fails
    }
}

给出了什么?

经过一些研究,我发现可能需要写入权限,因此对第二个参数使用重载将允许您写入perm

您的线路:

...OpenSubKey(@"Software\Clients\StartMenuInternet",true)...

经过一些研究后,我发现可能需要写入权限,因此对第二个参数使用重载将允许您写入perm

您的线路:

...OpenSubKey(@"Software\Clients\StartMenuInternet",true)...

为什么你需要两次转义注册表路径(
@
“\\\”
)?你不需要,我不是C#的超级用户,只是到处涉猎一些小应用程序,而我从来不知道转义的
@
,请检查我的更新,看看是否有帮助。为什么你需要两次转义注册表路径(
“\\”
)?你不知道,我不是C#的超级用户,只是到处玩弄一些小应用程序,而且我从来不知道逃逸的
@
,检查我的更新是否有用。应该可以。右键单击Regedit.exe中的注册表项、权限并检查管理员是否仍然拥有完全控制权。应该可以工作。右键单击Regedit.exe中的注册表项“权限”,然后检查管理员是否仍然拥有完全控制权。