【Net】CEF瀏覽IISExpress運行Web項目

来源:https://www.cnblogs.com/kiba/archive/2020/05/18/12719481.html
-Advertisement-
Play Games

前言 本文介紹在Winform桌面應用中,使用IISExpress做Host主機,啟動.Net平臺的Web項目。 瀏覽Web網頁使用CEF開源組件。 準備 首先創建Winform項目WinFormIISExpressHost。 然後把IISExpress文件夾放到項目的Bin\Debug下。 尋找I ...


前言

本文介紹在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

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一篇文章(https://www.cnblogs.com/meowv/p/12896898.html)已經成功將博客項目跑起來了,那麼本篇主要是將之前遺留的問題解決,現在的代碼看起來可能還是比較混亂,有大量與之無關的代碼存在裡面,對於強迫症患者來說真的是零容忍。 在程式員界,總有一批強迫症患者,他 ...
  • 0.前言 到目前為止,我們看了一下如何聲明EF Core的初步使用,也整體的看了下EF Core的映射關係配置以及導航屬性的配置。 這一篇,我帶大家分享一下,我在工作中需要的EF Core的用法。 1. 初始化 在實際開發中,一般都是先設計好數據表再進行開發,所以很少用到EF Core的數據遷移功能 ...
  • 找到layoutControlGroup1屬性的Padding 設置All 為0,下圖為設置完成後的: 有問題記錄一下。 ...
  • 最近在做.net core項目,然後就把VS 2017更新到最新版本,以及更新.net core sdk。頻繁的更新開發工具,結果就出現了“調用目標發生了異常”,本來運行、調試都是好好的,更新了一下版本,就出現這樣的問題,雖然不影響運行使用,但是每執行到一段代碼,就彈出“調用目標發生了異常”,特別煩 ...
  • 本文屬於OData系列 目錄 "武裝你的WEBAPI OData入門" "武裝你的WEBAPI OData便捷查詢" "武裝你的WEBAPI OData分頁查詢" 武裝你的WEBAPI OData資源更新 武裝你的WEBAPI OData之EDM 武裝你的WEBAPI OData常見問題 武裝你的W ...
  • 大家好,今天有時間給大家帶來Winform自繪控制項的第二部分,也是比較有意思的一個控制項:旋轉太極圖。 大家可以停下思考一下,如果讓你來繪製旋轉的太極圖,大家有什麼樣的思路呢?我今天跟大家展示一下,我平時繪製所用的思路,還請各位不吝賜教。 其實連續的動畫效果,微觀上去看,就是將這連續的時間切成一小段一 ...
  • 1.背景 在ketchup誕生之前。期間也是用surging開發了兩個項目。奈何surging沒有文檔,升級之後,只能從頭在讀一遍源碼,瞭解新功能,會消耗大量的時間。商業化也使一些 想學習微服務的人望而卻步。所以就誕生了我想做一個微服務框架的想法。 ketchup的誕生 借鑒了大量surging的設 ...
  • 參考資料:Invalid column name 'TagCode'. 該異常和Discriminator沒關係,一般原因:1、資料庫中欄位和實體類欄位不一致導致的2、創建新增繼承於資料庫對應的實體類,新增不用和資料庫映射,可在類上加[NotMapped]特性(屬於EF的命名空間)該特性是EF中的屬 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...