2011-04-05 20 views
2

我使用Project Options/Version來管理版本信息(N.N.N.N格式)。如何在Delphi應用程序中使用項目版本信息?

無論如何,在我的項目中,我重複了這些信息。

所以,如果在項目選項我在我的應用程序中的版本2.4.3.178 我有4個整數變量,包含4個數字。

我手動設置

Major := 2; 
Minor := 4; 
Release := 3; 
Build := 178; 

這樣做的理由很簡單:我有一個基於版本號的許可。因此,如果用戶購買版本「2.4」,則不允許升級到版本「3.0」。

但是,如果我依賴項目版本信息,用戶可以(通過Resource Hacker工具)更改版本信息並因此「激活」產品。

用戶不能以相同的方式更改4個變量(至少不容易)。

這有效,但迫使我複製信息。

你能提出一個更好的方法嗎?

否則說:有沒有辦法使用我在這4個變量中寫入的數據編寫版本信息。就像在Post Build Events中那樣,但是如何將數據傳遞給發佈後的事件?

+0

你想要什麼?防篡改?還是自動?還是方便?所有這些東西?一個很高的命令。 – 2011-04-05 15:49:23

回答

3

由於您希望在鏈接之前構建.res文件,因此您需要預構建事件而不是後構建事件。

我用一個簡單的Perl腳本來做一些非常類似的事情,該腳本讀取包含版本號常量聲明的包含文件(.inc)。我使用正則表達式讀取它們,然後創建我傳遞給brcc32的.rc文件。這些都是作爲預構建操作調用的。

+0

您也可以在構建後事件中通過替換exe中的資源來完成此任務,但預生成事件看起來像是邏輯選項。由於用戶使用Delphi-XE,他擁有Final BUilder,可以使用該文件和INI文件來自動構建,跳過Perl腳本。 +1 – 2011-04-05 08:17:05

+0

有點perl或python腳本,有點不對稱的加密和mime64編碼,你可能有一個可敬的版本欺騙預防系統。 – 2011-04-05 15:47:15

2

既然你是在Delphi-XE上,並且有了最終的構建器,爲什麼你不能很好地使用它,並從中構建你的「最終」版本呢?它可以給出一個非常好的解決方案,版本號問題,並可以做lot更多。

下面是我該怎麼做。

  • 設置一個包含版本信息相關部分的小型INI文件。
  • 可以選擇一個小的Delphi窗體應用程序,它從INI文件中讀取版本號,並給你一個改變它的機會。當更改保存到INI文件時,delphi應用程序應自動生成一個定義常量的小型Delphi PAS文件!
  • 創建一個可執行以下操作的FinalBuilder項目:
    • 調用您的Delphi exe來設置版本號。您將負責更改任何需要更改的內容,這可能是適當的,因爲您的許可方案取決於版本信息。
    • 設置幾個項目變量來保存版本信息編號
    • 添加「讀取INI文件」操作以從ini文件讀取版本信息到您的項目變量中。
    • (可選)構建單元測試項目,如果有的話。
    • (可選)調用單元測試項目。
    • 添加一個「構建Delphi項目」動作,將其設置爲使用您需要的任何選項來構建您的項目。添加一個小的「Before」腳本來設置版本信息編號,使其與您剛剛從INI文件中讀取的項目變量中的內容相符。
    • (可選)使用您使用的任何工具創建安裝程序包。
    • (可選)將這些安裝程序包上傳到網站。

換句話說,趁機開始使用最終生成器。

+0

這些都是很好的一點,但是OP似乎比構建自動化更關心防篡改功能。 – 2011-04-05 15:46:35

0

將您的版本號移入代碼中也很容易解決。

傳遞信息的一種方法是以編程方式生成version.rc文件(您可以使用delphi或您選擇的腳本語言自己編寫一個小型構建工具),並將資源鏈接到程序,而不是使用內置版本信息功能。

你的問題似乎基本上是一個阻止用戶一旦確定它就修改(容易)版本號的問題。

所以我建議你加密版本號,並使用加密版本,而不是VersionInfo結構中的版本。

我已經使用了DCPCRYPT這樣的東西。但是,如果你希望成爲防黑客,那就讓我說出來。任何你能做的事,黑客都可以撤消。如果你想更安全,你還需要篡改整個應用程序。有商業防篡改解決方案,但沒有任何工作與德爾福突破。

相關問題