2013-02-18 103 views
3

我有用VB6編寫的軟件產品。它是一個付費軟件產品,它有一個月的演示版本。演示版本沒有單獨的設置文件。進入產品密鑰的軟件變成演示版本的完整版本。我曾經在註冊表中編寫信息以跟蹤演示版本的1個月之後,軟件將無法工作。另外,如果Windows用戶不是管理員,則註冊表不能寫入HKLM。如果我向HKCU寫入註冊表,用戶可以創建新用戶並通過安裝它來重新使用該軟件。那麼如何管理演示版本到1個月,並且用戶在1個月後不能使用它而無需購買密鑰?管理軟件的演示版本

回答

2

我本來以爲你會需要創建一個許可證密鑰文件並將其與.exe文件一起存儲。它應該以某種方式進行加密,並保存它的創建時間和機器等的詳細信息。您可能會規避它,但它肯定會足夠滿足您的要求。

+0

如果用戶能夠安裝軟件,則安裝程序正在寫入安裝位置,安裝程序也可以將許可證文件寫入安裝位置。你爲什麼會認爲安裝程序無法寫入與可執行文件相同的位置? – 2013-02-18 12:00:27

+0

對不起,我從用戶的角度思考,即由應用程序創建。你沒有指定安裝程序。 – Deanna 2013-02-18 12:43:29

0

最好的辦法是讓你的軟件連接到服務器,並有註冊它的安裝日期,並讓它連接到你的服務器會在每次啓動

時間,這需要你的軟件有您的服務器的訪問雖然,所以它應該可能有網絡連接可能並不總是正確

這種方法的另一個好處是,你的軟件可以檢查服務器上的可用更新

+0

我不能用這種方法,因爲用戶可能無法將他的電腦連接到互聯網,所以它不會爲我工作。還有其他想法嗎? – Navaneet 2013-02-18 11:20:23

1

如果您擔心用戶創建新用戶帳戶以重新開始演示,那麼您需要寫入全球位置。 如果您在設置過程中設置了適當的位置,您可以作爲標準寫入HKLM。

請注意,如果用戶能夠/願意每隔30天創建一個新的用戶帳戶,則沒有註冊表項會阻止他們。

沒有中央激活服務的最佳選擇是將演示版本以某種有意義的方式進行排列以防止它們長時間使用。

我們的軟件演示版本在30分鐘後關閉,但他們可以註冊一個允許完全訪問的(註明日期的)試用版,在試用期過後回到演示版。

+0

對於過期的(試用版/演示版)鍵+1。當然,用戶可以更改Windows日期,但通常他們不會:) – Arvo 2013-02-18 14:29:41

+0

@Deanna但是在Windows 8中,我們無法在沒有管理員權限的情況下寫入HKLM。因此,我如何管理它? – Navaneet 2013-02-19 05:53:36

+0

@Navaneet自Windows NT以來,您一直無法成爲非管理員用戶。正如我在帖子中所說的,您可以在HKLM中設置一個特定的密鑰,並擁有正確的權限以允許非管理員程序寫入。你如何做到這一點取決於你的安裝程序。 – Deanna 2013-02-19 08:56:08

0

另一個想法,雖然我從來沒有嘗試過:

,你可以讓你的應用程序檢查應用程序的EXE文件proporties和比較,爲當前日期/時間

當然

用戶可以隨時在將來設置他的日期/時間,然後安裝您的應用程序,或在當前日期/時間安裝它,並在運行之前將其日期/時間更改爲過去

我不知道您的應用程序是否可以訪問它自己的屬性,但運行時會給出一些數據,當我運行該exe文件並單擊文本框時:

'1 form with 
' 1 textbox : name=Text1 multiline=true 

Option Explicit 

Private Sub Form_Resize() 
    Text1.Move 0, 0, ScaleWidth, ScaleHeight 
End Sub 

Private Sub Text1_Click() 
    Dim intFile As Integer 
    Dim strFile As String 
    Dim lngSize As Long 
    Dim dateMod As Date 
    Dim fs As New Scripting.FileSystemObject 
    Dim f As File 
    Text1.Text = "" 
    ' length of file 
    strFile = App.Path & "\FileProp.exe" 
    intFile = FreeFile 
    Open strFile For Input As #intFile 
    lngSize = LOF(intFile) 
    Close intFile 
    Text1.SelText = "LOF : " & CStr(lngSize) & vbCrLf 
    ' last modified 
    dateMod = FileDateTime(strFile) 
    Text1.SelText = "FileDateTime : " & CStr(dateMod) & vbCrLf 
    ' filesystemobject 
    Set f = fs.GetFile(strFile) 
    Text1.SelText = "fs.DateCreated : " & f.DateCreated & vbCrLf 
    Text1.SelText = "fs.DateLastAccessed : " & f.DateLastAccessed & vbCrLf 
    Text1.SelText = "fs.DateLastModified : " & f.DateLastModified & vbCrLf 
End Sub