使用 Process、RegistryKey 将 .NET Framework 代码移植到 .NET Standard

2024-03-08

我有一个来自现有 .NET Framework 项目的方法,该方法从注册表获取 Windows 中默认浏览器的路径,并使用Process call:

string browser = "";
RegistryKey regKey = null;

try
{
    regKey = Registry.ClassesRoot.OpenSubKey("HTTP\\shell\\open\\command", false);
    browser = regKey.GetValue(null).ToString().Replace("" + (char)34, "");
    if (!browser.EndsWith(".exe"))
        browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4);
}
finally
{
    if (regKey != null)
        regKey.Close();
}

ProcessStartInfo info = new ProcessStartInfo(browser);
info.Arguments = "\"" + url + "\"";
Process.Start(info);

该项目正在尝试进行跨平台设置,因此我将其移植到 .NET Standard (1.2)。问题是我不确定 .NET Standard 的等价物是什么RegistryKey and Process (and ProcessStartInfo)。当然,对于其他平台,该系统上可能没有注册表或任何“进程”的概念。那么.NET Standard中有没有办法实现上述功能呢? (或者也许这是一个 X-Y 问题而我的处理方式全错了?)


注册表仅在 .NET Standard 1.3 中可用,使用Microsoft.Win32.RegistryNuGet 包。因此,如果您想使用注册表,则不能以 1.2 为目标。

相似地,System.Diagnostics.Process适用于使用 NuGet 包的 .NET Standard 1.3System.Diagnostics.Process(对于 .NET Standard 2.0,不需要单独的 NuGet 包来访问它)。

为了获得“默认浏览器”,没有完整的跨平台解决方案,因为您需要与用户正在使用的任何桌面解决方案集成 - 例如MacOS、KDE、GNOME、Ubuntu Unity 等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Process、RegistryKey 将 .NET Framework 代码移植到 .NET Standard 的相关文章

  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 在 Visual Studio 安装程序中使用 Windows 环境变量作为注册表值

    嘿 我想使用 Windows 环境变量作为注册表项的值 不幸的是我不能简单地写一些像 systemroot system32 MyScreensaver scr 正如您所猜测的 我想将一些注册表值指向我自己的应用程序 例如自动启动和屏幕保护
  • 为什么有些控件同时具有BackgroundImage和Image属性?

    为什么有些控件喜欢Button or PictureBox两者都有BackgroundImage and Image财产 为什么在按钮的情况下需要它们两个 或者为什么在图片框中背景图像应该可用 BackgroundImage继承自Contr
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • 如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc

    尽管 Razor 视图中的 Asp 网络核心代码 model List
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • d3.slider 和在时间轴上过滤的日期

    I have this example http bl ocks org cmdoptesc fc0e318ce7992bed7ca8 where some points get spawned over time with a slide
  • CSS 中更智能的分词?

    如果我只是把word break break all在一个元素上 我经常会得到这样的结果 大家好 我正在输入一条消息圣人太长了 不适合 显然这会好得多 因为 大家好 我正在输入消息太长 无法容纳 但同时如果有人写 啊啊啊啊啊啊啊啊啊啊啊啊啊
  • 摆脱一生的限制?

    我正在尝试编写一个 Rust 函数 它将输入从一个生命周期约束转换为具有全局生命周期约束的相同类型的输出 概念上类似于unsafe fn foo lt a T1 T2 gt x T1 gt T2 where T1 a T2 T1 stati
  • 黄瓜报告缺少报告结果 - 报告未成功完成

    我使用 Cucumber Reports 插件在管道作业中获取 Cucumber 报告 以前工作正常 但现在出现此错误 CucumberReport Preparing Cucumber Reports CucumberReport JSO
  • 闪亮:无法在闪亮数据表中设置列宽

    我对 Shiny 和 DataTables 还很陌生 所以这可能是一个愚蠢的问题 由于某种原因我无法更改列宽 我试过 output table lt DT renderDataTable withProgress message Compi
  • 在 SQL Server 中,如何将 ROW_Number() 与子查询列一起使用?

    这是我的查询 DECLARE StartRow INT DECLARE PageSize INT SET StartRow 1 SET PageSize 5 SELECT ContractID Property FROM SELECT c
  • Notepad++ 可以配置为识别编译器错误消息并跳转到相应的位置吗?

    我正在一台没有 IDE 但使用 Notepad 的机器上构建一些相当大的代码 编译结果被重定向到一个文件 有时会有错误消息 满足定义良好的正则表达式 我想知道 NPP 是否有一个插件 它可以解析日志文件 识别错误 警告消息 并让我在相应的错
  • 如何使 require() 采取文件的直接路径

    所以我有以下代码 问题是当我循环遍历数组中的每个文件并尝试要求文件路径时 它给我一个找不到模块的错误 local Commands function getCommands local readdir fs readdir local re
  • kubectl:来自服务器的错误:当前没有打开 SSH 隧道

    我正在 Google Container Engine 上运行一些容器 有一天一切都很好 第二天就不行了attach不再到我的容器了 或者exec 或任何其他 docker 命令 我删除了 Pod 并让新的 Pod 实例化 但没有帮助 然后
  • JavaScript 中自定义类似数组的 getter

    我有一个简单的 ES6 类 如下所示 class Ring extends Array insert item index this splice index 0 item return this 我想让 Ring 对象的索引换行 这样ne
  • 为什么 F# 编译器对一种情况给出错误,而对另一种情况则不给出错误?

    我正在处理来自 F 的平台调用 并且收到一个编译器错误 我真的无法理解 首先 让我展示一下我正在做的事情的 C 签名 int Foo ULONG PTR phHandle DWORD flags 在 F 中 我认为本地调用它的正确方法如下
  • 如何使 fitBounds 感知自定义控件

    我的谷歌地图左侧有一个大型 300 500px 自定义控件 我将我的标记聚集在一起 当用户单击标记时 我想放大地图以显示该群集中的标记 问题是 当我得到标记集合的边界时 然后map fitBounds collection bounds 我
  • 如何在 Rake 任务中执行命令?

    我的 Rails 应用程序中有 rake 任务 我想在 rake 任务中运行命令行命令 我怎样才能做到这一点 我尝试了以下方法但失败了 desc Sending the newsletter to all the users task se
  • 如何从框架中获取用户输入并保存到txt文件中?

    我的程序运行如下 我有一个带有添加按钮 保存按钮和选项卡控件的表单 当单击表单中的添加按钮时 选项卡控件将添加更多选项卡项目 tabitem 基本上是从 myframe 添加的 其中包括用户在 TEdit 中键入的值 我想要实现的是当我点击
  • 如何在 RxJava 中延迟地从列表中发出项目?

    我正在使用 Retrofit 从 REST API 获取书签 public interface BookmarkService GET bookmarks Observable
  • UiWebView 委托方法未被调用

    我正在尝试在 webView 中播放 youtube 嵌入视频 当我未设置委托时它会播放 并且如果我设置委托视频不会加载 并且委托方法也不会被调用 这是我的代码 m class import EmbeddedVideoVC h interf
  • 数组之间的交集索引

    是否有一种快速方法可以将数组的每个元素与唯一标识符列表中的每个元素进行比较 使用 for 循环来遍历每个唯一值是可行的 但速度太慢而无法使用 我一直在寻找矢量化解决方案 但没有成功 任何帮助将不胜感激 arrStart startRavel
  • http 错误 403.14-禁止

    我成功地将我的测试 html 页面托管在iis8 当我尝试托管已经创建的网站时 我得到了http错误 403 14 禁止 即使我将默认文档设置为具有框架的起始 html 页面 该网站有几个文件夹内部文件夹 当我启用目录浏览时 它将列出该页面
  • Process.start() 启动的进程返回错误的进程 ID?

    我正在使用以下代码启动可执行文件 Process proc new Process proc StartInfo FileName executablePath proc Start proc WaitForInputIdle 在这次通话之
  • 使用 Process、RegistryKey 将 .NET Framework 代码移植到 .NET Standard

    我有一个来自现有 NET Framework 项目的方法 该方法从注册表获取 Windows 中默认浏览器的路径 并使用Process call string browser RegistryKey regKey null try regK