C# Can';不能从.net core运行已注册的协议进程,但可以从.net framework运行

C# Can';不能从.net core运行已注册的协议进程,但可以从.net framework运行,c#,.net-core,C#,.net Core,以下代码在.net framework上成功启动团队会议,但在.net core上运行时引发System.ComponentModel.Win32Exception(系统找不到指定的文件。): using System; namespace TryToRunMsteams { class Program { static void Main(string[] args) { var msg = "msteams:

以下代码在.net framework上成功启动团队会议,但在.net core上运行时引发
System.ComponentModel.Win32Exception
系统找不到指定的文件。
):

using System;

namespace TryToRunMsteams
{
    class Program
    {
        static void Main(string[] args)
        {
            var msg = "msteams://teams.microsoft.com/l/meetup-join/19%3ameeting_NTIyYmU4ZG...";
            System.Diagnostics.Process.Start(msg);
        }
    }
}
为什么呢?这两个环境中的用户都是同一用户(使用
Environment.UserName
检查)

如何在.net core中运行已注册的协议进程

无法从.net core运行已注册的协议进程,但可以从.net framework运行

这主要是因为您的目标是多个平台,而不仅仅是.NET framework。针对.NET framework时,标准的
Process.Start
将如您所见工作

 var msg = "msteams://teams.microsoft.com/l/meetup-join/19%3ameeting_NTIyYmU4ZG...";
 System.Diagnostics.Process.Start(msg);
要解决在
.NET Core
中启动进程的问题,请参阅下面的语法

 var msg = "msteams://teams.microsoft.com/l/meetup-join/19%3ameeting_NTIyYmU4ZG...";
 System.Diagnostics.Process.Start("cmd", $"/C start {msg}");
您的另一个选择(不会解决您的问题)是检查您运行的平台。如果需要基于平台执行特定操作,可能会很有用*请注意,这需要
System.Runtime.InteropServices
命名空间

 if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
 {
    // Do something for Windows
 }