前言
因本人工作需要,在一名非常非常好的老師的指導下,入門了C#,再次向老師表示感謝。
本人平時經常遇到的業務就是將數據下發給各部門,並讓各部門再上報,此過程中經常會遇到數據格式不正確,數據錯誤等諸多問題。於是我就想到寫一個數據上報系統,來規范他們的數據。但又因知識水平有限,暫時寫不了MVC等網頁程序,因此就做了個B/S版的WINFORM應用,但又不想每次更新后給他們每個人發客戶端或者自己寫代碼架設服務器實現自動更新(因為本人較懶,使用了微軟的ClickOnce,覺得很方便,所以就沒學習自己寫更新程序這部分內容,等以后了再學吧)。現創建一個簡單的DEMO,希望大家可以一起交流學習。文中有部分概念性的東西是引用的。
ClickOnce簡介
ClickOnce 部署使您可以將基於 Windows 的應用程序發布到 Web 服務器或網絡文件共享以簡化安裝。Visual Studio 對通過 ClickOnce 部署的應用程序的發布和更新提供完全支持。ClickOnce 部署可用於使用 Visual Basic、Visual C# 和 Visual J# 創建的項目,但不能用於使用 Visual C++ 創建的項目。
使用ClickOnce的好處
使用ClickOnce發布Windows應用程序可以使用戶方便地更新應用程序,可以起到B/S的效果,當程序更新了不必每一個用戶重新安裝更新。程序發布者只需要把新版本放到服務器,程序使用者在啟動軟件或退出軟件時即可更新軟件(更詳細參看圖解發布過程)。
當然,要使安裝過程更可視化、在安裝過程加入更多操作則應該自己制作安裝程序。
圖解發布過程
首先,配置好IIS,如下圖所示:
接着,選擇要發布的項目,右點擊選擇“屬性”,然后選擇“發布”選項頁,如下圖所示:
第一次使用ClickOnce這個功能,建議使用“發布向導”,“瀏覽”,選擇剛才配置IIS時候的目錄,如下圖所示:
下一步:此處要注意,必須用管理員賬戶運行VS才能獲取IIS的網址,否則會提示你用管理員帳戶重新運行。管理員運行VS后,選擇剛才配置的IIS網站,如下圖所示:
接下來,根據你程序的需要,選擇是否需要脫機運行,我選擇的是不允許,這里的區別就是如果允許,他們從網站運行一次就會將程序集全部下載到本地,以后不用通過網站也能運行,這樣可能會出現,你服務器上的已經更新到5.0了,而他們還依然使用着2.0的版本。所以我設置的是只能通過聯機使用。如下圖所示:
點擊完成后,如果不出意外,最簡單的布置就完成了,會直接跳轉到配置好的IIS網頁,如下圖所示:
點擊“運行”,會自動將程序下載並執行,如下圖:
點擊運行后會進入到程序,如下圖所示:
接下來,我們試着更改一下程序的內容,再發布一次,看看效果,將“hello world”改為"hello my friends!",並將字體顏色更改為橙色,然后再進行到程序的發布界面,點擊”立即發布“,版本編號會自動進行更新,由1.0.0.1變更成了1.0.0.2,前面的1.0.0.1指的是此次發布后程序的版本,后面的1.0.0.2指的是程序下一次發布后的版本號,如下圖:
發布后,VS會自動進入新的網站,如下圖所示:
可以看到,當前發布后的版本是1.0.0.1,點擊運行程序后,效果如下圖:
以上就實現了通過微軟給我們提供的ClickOnce來實現自動更新的基本功能。接下來,我把使用過程中的問題也總結一下:
1.程序發布后,點擊運行有可能會出現,沒有運行按鈕(我這里的圖有”運行“按鈕,此處win 7 和 win 10 界面不一致,大家遇到了根據情況可以試一下這個方法),錯誤提示界面如下圖:
此時需要在注冊表里面添加如下內容,即可解決此問題:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\Internet]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\Internet\MediaPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.MediaPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Audio=\"SafeAudio\" Video=\"SafeVideo\" Image=\"SafeImage\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\Internet\WebBrowserPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.WebBrowserPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Level=\"Safe\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\LocalIntranet]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\LocalIntranet\MediaPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.MediaPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Audio=\"SafeAudio\" Video=\"SafeVideo\" Image=\"SafeImage\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\LocalIntranet\WebBrowserPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.WebBrowserPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Level=\"Safe\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\TrustManager]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\TrustManager\PromptingLevel]
"MyComputer"="Enabled"
"LocalIntranet"="Enabled"
"Internet"="Enabled"
"TrustedSites"="Enabled"
"UntrustedSites"="Disabled"
2.如果你的程序集中有插件或者引用文件的話,要在【應用程序文件中添加】,如下圖:
在上面這個界面中將所需的文件發布狀態改為”包括“,
在上面這個界面中將所需的文件復制到輸出目錄改為”始終復制“,這樣就能保證你的DLL或者一些引用文件能隨着你的程序發布出去,否則雖然能發布成功,但程序無法正常運行。
以上就是我目前使用過程中的一些心得, CliceOnce的功能遠比我說的要強大的多,我只是用了一些基礎的功能,有可能以上內容中有不少錯誤,還請大家多多批評指正,謝謝。