gpt4 book ai didi

c# - 如何在 Windows (8.1) 中将自定义应用程序注册为 Web 浏览器?

转载 作者:可可西里 更新时间:2023-11-01 09:47:35 24 4
gpt4 key购买 nike

我正在尝试注册我自己的应用程序,以便它出现在使用我找到的信息在 Windows 中选择默认浏览器的列表中 around the internet .代码全部运行没有问题,并且似乎创建了正确的注册表项,但我的应用程序未显示在 Windows 8.1 的“浏览器选择”选项中。

我还没有设置一些在线代码示例中显示的 UserChoice 值,因为看起来它实际上设置了默认浏览器(只有一个值),我没有尝试为此,只需将其注册为一个选项。

相关代码在 RegisterBrowser 中,但为方便起见,我包含了完整的类。

using System;
using System.Reflection;
using Microsoft.Win32;

namespace MyApp
{
class Program
{
const string AppID = "MyApp";
const string AppName = "My App";
const string AppDescription = "My App";
static string AppPath = Assembly.GetExecutingAssembly().Location;
static string AppIcon = AppPath + ",0";
static string AppOpenUrlCommand = AppPath + " %1";
static string AppReinstallCommand = AppPath + " --register";

static void Main(string[] args)
{
if (args == null || args.Length != 1 || !HandleArg(args[0]))
ShowHelpInfo();
}

static bool HandleArg(string arg)
{
if (string.Equals(arg, "--register", StringComparison.OrdinalIgnoreCase))
RegisterBrowser();
else if (string.Equals(arg, "--unregister", StringComparison.OrdinalIgnoreCase))
UnregisterBrowser();
else if (arg.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || arg.StartsWith("https://", StringComparison.OrdinalIgnoreCase) || arg.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase))
LaunchBrowser(arg);
else
return false;

return true;
}

static void ShowHelpInfo()
{
Console.WriteLine("Usage:");
Console.WriteLine(" MyApp.exe --register Register as web browser");
Console.WriteLine(" MyApp.exe --unregister Unregister as web browser");
Console.WriteLine(" MyApp.exe \"http://example.org/\" Launch example.org in specified browser");
}

static void RegisterBrowser()
{
// Register application.
var appReg = Registry.LocalMachine.CreateSubKey(string.Format("SOFTWARE\\Clients\\StartMenuInternet\\{0}", AppID));
appReg.SetValue("", AppName);
appReg.CreateSubKey("DefaultIcon").SetValue("", AppIcon);
appReg.CreateSubKey("shell\\open\\command").SetValue("", AppOpenUrlCommand);

// Install info.
var appInstallInfo = appReg.CreateSubKey("InstallInfo");
appInstallInfo.SetValue("IconsVisible", 1);
appInstallInfo.SetValue("ShowIconsCommand", AppPath); // TOOD: Do I need to support this?
appInstallInfo.SetValue("HideIconsCommand", AppPath); // TOOD: Do I need to support this?
appInstallInfo.SetValue("ReinstallCommand", AppReinstallCommand);

// Register capabilities.
var capabilityReg = appReg.CreateSubKey("Capabilities");
capabilityReg.SetValue("ApplicationName", AppName);
capabilityReg.SetValue("ApplicationIcon", AppIcon);
capabilityReg.SetValue("ApplicationDescription", AppDescription);

// Set up protocols we want to handle.
var urlAssoc = capabilityReg.CreateSubKey("URLAssociations");
urlAssoc.SetValue("http", AppID);
urlAssoc.SetValue("https", AppID);
urlAssoc.SetValue("ftp", AppID);
}

static void UnregisterBrowser()
{
Registry.LocalMachine.DeleteSubKeyTree(string.Format("SOFTWARE\\Clients\\StartMenuInternet\\{0}", AppID), false);
}

static void LaunchBrowser(string arg)
{
Console.WriteLine(arg);
Console.ReadLine();
}
}
}

最佳答案

我不知 Prop 体的代码,但如果您只需要一个注册表文件,您可以执行以下操作:(它将使用默认程序注册您的应用程序并为您设置所有处理程序)

Windows Registry Editor Version 5.00

; Infamous capabilities:

[HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\Capabilities]
"ApplicationDescription"="MyApp"
"ApplicationIcon"="C:\\MyApp\\MyApp.exe,0"
"ApplicationName"="MyApp"

[HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\Capabilities\FileAssociations]
".htm"="MyAppURL"
".html"="MyAppURL"
".shtml"="MyAppURL"
".xht"="MyAppURL"
".xhtml"="MyAppURL"

[HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\Capabilities\URLAssociations]
"ftp"="MyAppURL"
"http"="MyAppURL"
"https"="MyAppURL"

; Register to Default Programs

[HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications]
"MyApp"="Software\\MyApp\\Capabilities"

; MyAppURL HANDLER:

[HKEY_LOCAL_MACHINE\Software\Classes\MyAppURL]
@="MyApp Document"
"FriendlyTypeName"="MyApp Document"

[HKEY_LOCAL_MACHINE\Software\Classes\MyAppURL\shell]

[HKEY_LOCAL_MACHINE\Software\Classes\MyAppURL\shell\open]

[HKEY_LOCAL_MACHINE\Software\Classes\MyAppURL\shell\open\command]
@="\"C:\\MyApp\\MyApp.exe\" \"%1\""

关于c# - 如何在 Windows (8.1) 中将自定义应用程序注册为 Web 浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32671277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com