【Net】CEF瀏覽IISExpress執行Web專案

kiba518發表於2020-05-18

前言

本文介紹在Winform桌面應用中,使用IISExpress做Host主機,啟動.Net平臺的Web專案。

瀏覽Web網頁使用CEF開源元件。

準備

首先建立Winform專案WinFormIISExpressHost。

然後把IISExpress資料夾放到專案的Bin\Debug下。

尋找IISExpress

尋找IISExpress很簡單,如果本機安裝了VS,那麼可以直接在C:\Program Files\IIS Express下找到。

當然,也可以上官網下載安裝,然後到安裝目錄找IISExpress,官方下載地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=34679

注意:IISExpress預設的資料夾名是【IIS Express】,這中間有個空格,我們需要去掉它,因為後面需要用命令列啟動IISExpress,空格會給我們帶來很多麻煩。

啟動IISExpress

IISExpress資料夾下有個iisexpress.exe檔案,我們只要啟動它IIS就會執行。

但IISExpress有個問題,它預設不讀取當前目錄的下配置檔案【AppServer\applicationhost.config】;所以我們在啟動IISExpress時,必須指定它的啟動檔案。

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

start C:\Users\Administrator\Desktop\IISExpress\iisexpress /config:C:\Users\Administrator\Desktop\IISExpress\AppServer\applicationhost.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}IISExpress\AppServer\applicationhost.config";
        Start($@"{DirMain}IISExpress\iisexpress", 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的配置檔案是AppServer\applicationhost.config,現在我們修改它,讓IISExpress指定當前專案的路徑下的Bin\WebSite資料夾為網站應用的根目錄。

用記事本開啟applicationhost.config,然後找到sites(網站配置節點)。

修改網站資訊中的physicalPath(物理路徑)屬性的值。

ps:我們還可以修改網站執行埠,和在複製一個Site節點,增加另一個網站。

<sites>
            <site name="Development Web Site" id="1" serverAutoStart="true">
                <application path="/">
                    <virtualDirectory path="/" physicalPath="D:\WinFormIISExpressHost\bin\Debug\WebSite" />
                </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%\Microsoft\IISExpressLogs" 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

 

 

相關文章