C# “Windows 10打开”;你';“我需要一个新的应用程序才能打开myapp”;在尝试启动流程时
在早期版本的Windows中(8和10之前)。您可以简单地执行这段代码:C# “Windows 10打开”;你';“我需要一个新的应用程序才能打开myapp”;在尝试启动流程时,c#,C#,在早期版本的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 {
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中,如果该程序不存在,您将收到以下消息:
而且这个网站永远不会被打开。有没有其他方法可以解决这个问题?我们来看看这个过程是否存在,然后启动相应的程序,如下所示:
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);
}
}
好的,我试着自己运行下面的代码,它在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,它会打开默认浏览器 所需的结果是什么?打开特定浏览器或特定应用程序?或者只是url?因为你所描述的是Win 10中的默认结果,这很有意义。您正在尝试打开应用程序,而不是启动浏览器。您没有看到问题。“如果程序不存在,它将打开网页。如果程序存在,它将打开网页。”它在Windows 7上工作,因为当时没有内置应用商店。在Windows 7中,如果你试图打开一个不存在的进程/协议,你将抛出一个异常,因此上面的代码片段将打开网页。但是,Windows 8和10上从未引发异常,因为Microsoft通过重定向到应用商店弹出窗口来规避此问题。我将使用“如何检测浏览器协议处理程序”并在@Stavm正确处理它。这不是浏览器协议,而是进程协议。这不包括进程未启动时的情况。它只会打开网页。AFAIK进程在启动时可以查询。如果要查询已注册的服务,可以参考和。中提供了这些方面的详细解释