zoukankan      html  css  js  c++  java
  • 【Net】CEF浏览IISExpress运行Web项目

    前言

    本文介绍在Winform桌面应用中,使用IISExpress做Host主机,启动.Net平台的Web项目。

    浏览Web网页使用CEF开源组件。

    准备

    首先创建Winform项目WinFormIISExpressHost。

    然后把IISExpress文件夹放到项目的BinDebug下。

    寻找IISExpress

    寻找IISExpress很简单,如果本机安装了VS,那么可以直接在C:Program FilesIIS Express下找到。

    当然,也可以上官网下载安装,然后到安装目录找IISExpress,官方下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=34679

    注意:IISExpress默认的文件夹名是【IIS Express】,这中间有个空格,我们需要去掉它,因为后面需要用命令行启动IISExpress,空格会给我们带来很多麻烦。

    启动IISExpress

    IISExpress文件夹下有个iisexpress.exe文件,我们只要启动它IIS就会运行。

    但IISExpress有个问题,它默认不读取当前目录的下配置文件【AppServerapplicationhost.config】;所以我们在启动IISExpress时,必须指定它的启动文件。

    指定IISExpress的命令行如下,可以在CMD下运行。

    start C:UsersAdministratorDesktopIISExpressiisexpress /config:C:UsersAdministratorDesktopIISExpressAppServerapplicationhost.config
    

    现在我们把该命令行转换成代码启动,如下:

    public string DirMain = Environment.CurrentDirectory + @"";
    private void Form1_Load(object sender, EventArgs e)
    {
        var plist = System.Diagnostics.Process.GetProcessesByName("iisexpress");
        if (plist.Count() <= 0)
        {
            string para = $@"/config:{DirMain}IISExpressAppServerapplicationhost.config";
            Start($@"{DirMain}IISExpressiisexpress", para);
    ​
        }
    }
    public static bool Start(string programPath, string para)
    {
        try
        {
            Process myProcess = new Process();
            myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.FileName = programPath;
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.Arguments = para;
            myProcess.EnableRaisingEvents = false;
            bool boo = myProcess.Start();
            return boo;
        }
        catch (Exception ex)
        {
            return false;
        }
    } 

    修改IISExpress配置文件

    IISExpress的配置文件是AppServerapplicationhost.config,现在我们修改它,让IISExpress指定当前项目的路径下的BinWebSite文件夹为网站应用的根目录。

    用记事本打开applicationhost.config,然后找到sites(网站配置节点)。

    修改网站信息中的physicalPath(物理路径)属性的值。

    ps:我们还可以修改网站运行端口,和在复制一个Site节点,增加另一个网站。

    <sites>
                <site name="Development Web Site" id="1" serverAutoStart="true">
                    <application path="/">
                        <virtualDirectory path="/" physicalPath="D:WinFormIISExpressHostinDebugWebSite" />
                    </application>
                    <bindings>
                        <binding protocol="http" bindingInformation=":5180:localhost" />
                    </bindings>
                </site>
                <siteDefaults>
                    <!-- To enable logging, please change the below attribute "enabled" to "true" -->
                    <logFile logFormat="W3C" directory="%AppData%MicrosoftIISExpressLogs" enabled="false" />
                    <traceFailedRequestsLogging directory="%AppData%Microsoft" enabled="false" maxLogFileSizeKB="1024" />
                </siteDefaults>
                <applicationDefaults applicationPool="IISExpressAppPool" />
                <virtualDirectoryDefaults allowSubDirConfig="true" />
            </sites> 

    测试

    现在我们新建一个WebTEST的MVC网站项目,然后将其发布;将发布的文件放到刚刚的Winform项目的Bin/Website文件夹下(也可以直接发布到该文件夹下)。

    然后运行项目。

    项目运行后,电脑右下角会出现IISExpress的图标。

    然后我们访问http://localhost:5180/。访问成功;如下图:

    CEF应用

    IISExpress已经成功运行了,现在我们使用CEF来浏览网页。(CEF是一个使用Chrome内核的Browser)

    首先引用CEF(有时候引用了CEF后,项目会出现未刷新的情况,关闭重启即可在引用中看到引用的DLL了),如下图:

    引用了CEF后,我们会发现,项目编译会报错;这是因为CEF不支持AnyCPU,所以我们需要将平台目标改成X64。(项目属性和解决方案配置都要修改)

    不过很多时候,我们的解决方案必须使用AnyCPU,那么,我们就需要修改下工程文件了。(项目属性必须是X64)

    用记事本打开WinFormIISExpressHost.csproj;在第一个PropertyGroup下增加节点<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>;如下图:

    修改完工程文件VS会提示重新加载项目;点击确定重新加载,然后项目已经可以编译过去了。

    现在我们将CEF应用到项目中,代码如下:

    var chromeBrowser = new ChromiumWebBrowser("http://localhost:5180/");
                panelParent.Controls.Add(chromeBrowser);

    然后运行项目。如下图,项目在Anycpu下运行成功。

    ----------------------------------------------------------------------------------------------------

    代码已经传到Github上了,欢迎大家下载。

    Github地址:https://github.com/kiba518/WinFormIISExpressHost

    ----------------------------------------------------------------------------------------------------

    注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
    若您觉得这篇文章还不错,请点击下方的推荐】,非常感谢!

    https://www.cnblogs.com/kiba/p/12719481.html

     

  • 相关阅读:
    mobile web retina 下 1px 边框解决方案
    git基础操作
    JavaScript词法分析
    JS给元素循环添加事件的问题
    useMemo优化React Hooks程序性能,解决子组件重复执行问题
    使用 useReducer 和 useCallback 解决 useEffect 依赖诚实与方法内置&外置问题
    createContext 和 useContext 结合使用实现方法共享(React Hook跨组件透传上下文与性能优化)
    浅谈开发变量作用域---小坑
    优雅的在React项目中使用Redux
    浅谈react无状态组件(哑组件)和有状态组件(智能组件)的区别
  • 原文地址:https://www.cnblogs.com/kiba/p/12719481.html
Copyright © 2011-2022 走看看