从控制台项目启动asp.net项目的浏览器



我有一个非常简单的程序,我希望能够使用多个用户界面。其中一个接口将是一个asp netCore 3.1* web应用程序。

例如,如果控制台应用程序启动时没有参数,检测到的平台是Linux,我想启动一个AspNetCore项目,并启动一个指向适当URL的浏览器。或者,如果控制台应用程序是带参数启动的,我希望输入和输出在控制台窗口中继续进行。我也想为其他用户界面类型留下可能性。

我想要的结果是,如果满足某些条件,工厂创建一个web应用程序项目。

到目前为止,我的基本方法是
WebUi.ProgramWebUi webUi = new ProgramWebUi();

其中programweb为aspWebApp项目中Program.cs文件中的类名。这似乎正确地创建了项目,但我也希望它使用系统默认浏览器启动网站。

我在Windows中看到过这样的方法。这些方法要么是

Process.Start("Url-Here");

不幸的是,这不起作用,因为它试图用URL的名称启动应用程序。我也见过其他涉及注册表查找的窗口。但是,我希望它能跨平台工作。

  1. 是否可以在跨平台的基础上检测系统默认浏览器?

另外,即使我手动添加路径,我似乎也无法获得

Process.Start("Application Name here");

按预期工作。即使在同一工作中直接启动由同一用户拥有的东西时,我也会得到异常,告诉我权限被拒绝。

感谢所有的帮助。

我找到的方法是从一个asp应用程序开始,它的核心本质上是一个控制台应用程序。然后,在program.cs(或任何保持启动的类)中删除

行。
CreateHostBuilder(args).Build().Run();

及其相关条目

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });

将它们添加到另一个类中,该类可以是工厂模式的一部分。通过这种方式,您可以选择是否实际启动web。这种方法还允许轻松启动多个主机(因为它的类型是控制台应用)。

当涉及到启动浏览器和web服务器时,操作系统之间的方法有所不同。我发现很多文章都说要使用Process.Start(URL-here"),但是我无法在Linux或Windows上使用它。在Windows 10中,你必须在注册表中查找信息。我在这里找到了一个可行的解决方案。然后使用

Process process = new Process();
process.StartInfo.FileName = browserPath;
process.StartInfo.Arguments = "your-url";
process.Start();

对于Linux,我尝试使用类似的方法使用xdg-open。然而,如果没有完整的路径,这将无法启动,这取决于发行版。相反,答案是创建一个可执行的bash脚本并使用:

Process process = new Process();
process.StartInfo.FileName = "myBashScript.sh";
process.Start(); 

bash脚本很简单,只有两行代码。

#!/usr/bin/env bash
xdg-open "your-url-here/"

mac用户将需要(这是基于阅读,我实际上没有mac来测试这个)

#!/usr/bin/env bash
open "your-url-here/"

把这些都放在一起。在运行

之前
CreateHostBuilder(args).Build().Run();

启动一个进程来启动浏览器,并添加一个短线程睡眠来给web服务器初始化的时间。最后,获取环境并相应地启动。

System.Threading.Thread.Sleep(5000);
Process process = new Process();
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
process.StartInfo.FileName = "./BrowserLaunch/BrowserLaunchLinux.sh";
}
else if (Environment.OSVersion.Platform == PlatformID.MacOSX)
{
process.StartInfo.FileName = "./BrowserLaunchBrowserLaunchMacOSx.sh";
}
else if (Environment.OSVersion.Platform == PlatformID.Win32Windows || 
Environment.OSVersion.Platform == PlatformID.Win32NT)
{
string browserPath = GetPathToDefaultBrowser();
process.StartInfo.FileName = browserPath;
process.StartInfo.Arguments = "your-url";
}
else
{
//do something else
}
process.Start();

相关内容

  • 没有找到相关文章

最新更新