【问题标题】:Windows 10 opens "You'll need a new app to open myapp" when trying to start a process尝试启动进程时,Windows 10 会打开“您需要一个新应用程序才能打开 myapp”
【发布时间】:2017-11-25 21:07:01
【问题描述】:

在早期版本的 Windows(8 和 10 之前)中。你可以简单地执行这段代码:

class Program
{
    static void Main(string[] args)
    {
        TryStart("myapp:", "https://www.google.com");
    }

    private static void TryStart(String url, String raw = "")
    {
        try
        {
            if (!String.IsNullOrEmpty(url))
            {
                Process.Start(url);
            }
        }
        catch
        {
            if (!String.IsNullOrEmpty(raw))
            {
                Process.Start(raw);
            }
        }
    }
}

它会完美运行。如果该程序不存在,它将打开网页。如果程序确实存在,它会打开它。

但是,在 Windows 8 和 10 中,如果该程序不存在,您将收到此消息:

而且该网站永远不会打开。有没有其他办法解决这个问题?

【问题讨论】:

  • 要求的结果是什么?打开特定的浏览器或特定的应用程序?或者也许只是网址?因为您所描述的是 Win 10 中的默认结果,这是有道理的。您正在尝试打开应用程序,而不是启动浏览器。
  • 您没有阅读问题。 “如果程序不存在,它会打开网页。如果程序确实存在,它会打开它。”它适用于 Windows 7,因为当时没有内置应用商店。
  • 在windows 7中,如果你试图打开一个不存在的进程/协议,你会被抛出一个异常,所以上面的sn-p会打开网页。但是,该异常不会在 Windows 8 和 10 上引发,因为 Microsoft 通过重定向到该应用商店弹出窗口来规避该问题。
  • 我会选择“如何检测浏览器协议处理程序”并正确处理它stackoverflow.com/questions/836777/…
  • @Stavm 不是浏览器协议,是进程协议。

标签: c#


【解决方案1】:

如何检查进程是否存在并启动适当的程序如下:

        private static void TryStart(String url, String raw = "")
        {
            var processes = Process.GetProcessesByName(url);
            if (processes!=null && processes.Any())
            {
                Process.Start(url);

                //Process.Start(processes.First().ProcessName); //This can be used as well to start.
            }
            else
            {
                Process.Start(raw);
            }

        }

【讨论】:

  • 这不包括如果进程没有启动。它只会打开网页。
  • AFAIK 进程在启动时可供查询。如果要查询注册的服务,可以参考MSDNthis SOthis SO 中提供了对这些方面的一个很好的解释
【解决方案2】:

好的,我已经尝试自己运行下面的代码,它可以在 Win 10 pro 中运行。检查一下,看看这是否适合你。

string url = "http://stackoverflow.com";

var processes = Process.GetProcessesByName(url);
if (processes != null && processes.Any())
{
  Process.Start(processes.First().ProcessName); //This can be used as well to start.
}
else
{
 Process.Start(url);
}

当我尝试运行已注册的应用程序时,即使该应用程序没有运行,它也能正常工作。如果我使用 url,它会打开默认浏览器。

【讨论】:

    猜你喜欢
    • 2021-03-17
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多