.Net開發筆記(二十)創建一個需要授權的第三方組件


在使用需要授權的軟件時,注冊付費的目標是軟件的使用者,我們開發人員平時用到的一些第三方組件也是需要授權付費的,也就是說,付費者是開發人員,並不是系統(使用了該第三方組件)的最終使用者。

以上兩者的區別如下圖:

圖1

本篇文章介紹.net中怎樣開發需要授權的第三方控件(組件),既然授權對象是開發者,不是最終用戶,那么授權入口只能提供給開發人員,而不應該提供給最終用戶。另外,一般情況下,組件的一次成功授權只能供一個開發人員使用,因此授權信息需要跟開發人員的電腦綁定,這個可以通過關聯機器硬件編碼來做到。軟件開發完成發布后,第三方組件不應該影響用戶的使用,也就是說,發布后的組件,不能再綁定到具體電腦。總結一下,大概包含以下幾點:

  • 組件的授權收費是針對使用該組件開發軟件的人;
  • 組件的授權跟機器綁定,一次成功的授權只能供一個開發人員使用;
  • 軟件發布后,組件不能再影響最終用戶,第三方組件的授權入口對最終用戶透明。

要解決以上三點,需要知道很重要的一個概念就是之前系列博客中介紹的“設計時(Design-Time)”和“運行時(Run-Time)”,以及明白它兩的區別和聯系。

前面系列博客得知:

任何一個組件有兩種狀態,即“設計時”和“運行時”,簡單之,組件處在窗體設計器中時,它就處於“設計時”;反之,程序跑起來后,組件就處於“運行時”。同一個組件,處於設計時的行為和處於運行時的行為可能不一樣,這就像同一個人,在他老爸面前和在他兒子面前的行為可能不一樣。用一個簡潔的代碼展示如下:

 1 class 組件
 2 {
 3 public 組件()
 4 {
 5     if(設計時)
 6     {
 7          //do something while design-time
 8     }
 9     else
10     {
11          //do something while run-time
12     }
13 }
14 public void DoSomething()
15 {
16    if(設計時)
17 {
18     //do something while design-time
19 }
20 else
21 {
22    //do something while run-time
23 }
24 }
25 }
View Code

如上代碼所示,軟件開發階段,開發人員使用第三方組件,需要在窗體設計器中實例化一個組件實例,那么這時候就可以檢查組件在當前機器上的授權狀態(已授權、試用期還是已過期),這時候檢查授權狀態需要和當前機器硬件信息關聯。軟件發布后,組件不再在窗體設計器中,同時組件面向的是最終用戶,理論上不應該再檢查組件的授權狀態,但是為了防止開發人員使用試用期的組件發布了軟件,因此在組件發布后,還是有必要檢查一下組件的授權狀態,這時候檢查方式就不用與硬件信息關聯了。

本篇Demo中做了一個等待控件,我們在使用它進行開發的時候需要取得授權許可,授權時根據生成的申請碼(跟本機硬盤編號關聯),去匹配組件開發商提供的激活碼,兩者一致的話,授權成功,否則提供30天的試用期,在試用階段,界面顯示試用標志,30天試用結束后,組件不能再繼續試用。如果需要發布,則需要調用組件對應的方法,給它提供一個申請碼和一個激活碼,授權成功,組件正常使用,授權不成功,組件顯示未授權標志(但不要求最終用戶獲得授權)。

判斷組件當前狀態方法:

 1  /// <summary>
 2         /// 檢查組件狀態
 3         /// </summary>
 4         void CheckStatus()
 5         {
 6             ISelectionService isp = GetService(typeof(ISelectionService)) as ISelectionService; //獲取服務
 7 //同一個組件 處於不同狀態下 有不同的行為
 8             if (isp == null) //組件處於發布時(或者運行時 run-time)
 9             {
10 //什么都不干
11             }
12             else //組件處於開發時(或者設計時 design-time)
13             {
14                 if (AuthorizeHelper.CheckActivateCode(Properties.Settings.Default.ActivateCode, LocalMachine.GetAskCode())) //檢查是否已授權
15                 {
16                     currentStatus = 1; //開發時已授權
17                 }
18                 else
19                 {
20                     using (frmAuthority frma = new frmAuthority()) //授權對話框
21                     {
22                         if (frma.ShowDialog() == DialogResult.OK) //授權成功
23                         {
24                             currentStatus = 1;
25                         }
26                         else
27                         {
28                             if ((DateTime.Now - Properties.Settings.Default.TrialStart).TotalDays >= 30) //判斷試用是否到期
29                             {
30                                 //拋異常
31                                 throw new Exception("ProgressBar組件未授權!");
32                             }
33                             else
34                             {
35                                 currentStatus = 0; //開發時試用
36                             }
37                         }
38                     }
39                 }
40             }
41         }
View Code

發布后,提供申請碼和激活碼激活組件:

 1 /// <summary>
 2         /// 發布時授權入口
 3         /// </summary>
 4         /// <param name="askCode"></param>
 5         /// <param name="activateCode"></param>
 6         public void UnLock(string askCode, string activateCode)
 7         {
 8             if (AuthorizeHelper.CheckActivateCode(activateCode, askCode)) //判斷是否合法
 9             {
10                 currentStatus = 3; //開發時(運行時)已授權
11             }
12             else
13             {
14                 currentStatus = 2; //開發時(運行時)試用
15             }
16         }
View Code

注:本文主要講述第三方組件授權原理,其余有關授權方式是否安全等有待完善。

Demo項目結構:

圖2

效果圖:

1)開發階段,組件授權界面

圖3

2)開發階段,ProgressBar試用期

圖4

3)發布后,未授權的ProgressBar

圖5

4)開發階段,授權成功

圖6

源碼下載地址:http://files.cnblogs.com/xiaozhi_5638/ComponentCopyProtection.rar

希望有幫助!

 


免責聲明!

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



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