解決c#,wpf程序帶環境安裝包體積太大問題


在.net開發客戶端的時候,一定會遇到用戶沒有安裝.net環境的問題,特別是現在win7,win8,win10多系統並用的時間段,很多開發者使用的是4.5的目標環境,用戶卻是使用win7的系統,這樣勢必會要安裝環境包

可是如果win7的用戶已經安裝4.5的環境呢?那么用戶是否需要連帶着環境包一起下載呢?

 

我們前幾天也遇見了這種困境,如果加上環境,安裝包的體積太大,本身軟件才幾m,環境竟然高達70M,完全不合理嘛。

后來想到了一個折中的辦法,

我們可以在項目中添加一個新的工程名為【PreLoad】,目標的環境選擇win7最低的版本,framework 3.5

然后把主程序的入口設置成我們的PreLoad,在程序啟動的時候PreLoad來判斷用戶的電腦安裝的最高環境是否符合我們主程序的要求,如果符合,那么直接啟動程序,如果不符合,我們在PreLoad中下載目標環境,自動安裝。

這樣,我們的程序體積就能大大減少。

 

至於為什么不用低版本的framework開發?

那是因為很多酷炫的功能只有高版本的才有,用戶可挑剔了。一般客戶端的得喜歡用c++,我水平不夠頂多就要依賴framework開發wpf了

 

獻上判斷本機最高framework版本的代碼

 

        public static bool IsOverVersion()
        {
            using (RegistryKey ndpKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\"))
            {
                int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release"));
                return CheckVersion(releaseKey);
            }
        }
private static string CheckFor45DotVersion(int releaseKey)
        {
            if (releaseKey >= 394271)
                return "4.6.1 installed on all other Windows OS versions or later";
            if (releaseKey >= 394254)
                return "4.6.1 installed on Windows 10 or later";
            if (releaseKey >= 393297)
                return "4.6 installed on all other Windows OS versions or later";
            if (releaseKey >= 393295)
                return "4.6 installed with Windows 10 or later";
            if (releaseKey >= 379893)
                return "4.5.2 or later";
            if (releaseKey >= 378758)
                return "4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2 or later";
            if (releaseKey >= 378675)
                return "4.5.1 installed with Windows 8.1 or later";
            if (releaseKey >= 378389)
                return "4.5 or later";

            return "No 4.5 or later version detected";
        }

  

 

PS:很多人喜歡使用 Environment.Version     來判斷系統的版本號,可是經過測試,這樣的拿到的數據只是軟件本身目標框架的版本,並不是本機的最高版本號,最高的版本號還是要在注冊表里面查看。

在代碼中已經標明了個個版本在注冊表中拿到的版本號碼。

 

另外很多同學會問如果我就是需要知道目標框架呢?

那我這里還有一份表格,由Environment.Version 拿到的數據可以通過這個來判斷版本

Base 4.0

  • 4.0.30319.1 = .NET 4.0 RTM
  • 4.0.30319.269 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 
  • 4.0.30319.276 = .NET 4.0 on Windows XP SP3 (4.0.3 Runtime update)
  • 4.0.30319.296 = .NET 4.0 on Windows XP SP3, 7 
  • 4.0.30319.544 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 
  • 4.0.30319.1008 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS13-052 GDR security update)
  • 4.0.30319.1022 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS14-009 GDR security update)
  • 4.0.30319.1026 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS14-057 GDR security update)
  • 4.0.30319.2034 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS14-009 LDR security update)

4.5

  • 4.0.30319.17626 = .NET 4.5 RC
  • 4.0.30319.17929 = .NET 4.5 RTM
  • 4.0.30319.18010 = .NET 4.5 on Windows 8
  • 4.0.30319.18052 = .NET 4.5 on Windows 7 SP1 64-bit
  • 4.0.30319.18063 = .NET 4.5 on Windows 7 SP1 64-bit (with MS14-009 security update)

4.5.1

  • 4.0.30319.18408 = .NET 4.5.1 on Windows 7 SP1 64-bit
  • 4.0.30319.18444 = .NET 4.5.1 on Windows 7 SP1 64-bit (with MS14-009 security update)
  • 4.0.30319.34014 = .NET 4.5.1 on Windows 8.1 64-bit

4.5.2

  • 4.0.30319.34209 = .NET 4.5.2 on Windows 7 SP1 64-bit
  • 4.0.30319.34209 = .NET 4.5.2 on Windows 8.1 64-bit

4.6

  • 4.0.30319.42000 = .NET 4.6 on Windows 8.1 64-bit

 

 

 

 

 PSS:最后,感嘆一下,離開大公司進入創業公司之后,面對的問題越來越多,解決問題的能力得到了質的飛躍,每一個項目都是公司的命脈,每個人的身上都肩負着重要的責任,不再是大公司的螺絲釘,而是建設的參與者,方向的影響者。

如有疑問歡迎提問,大家共同進步!

 

最后,創業公司招人,前端,PHP,c#,公司地址:廣州,有意者歡迎留言私聊。

 

 

個人主頁:WWW.bobdong.cn

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM