2013-08-25 52 views
2

我試圖驗證用戶在服務器端輸入的序列號與Web服務,,,當用戶輸入串行密鑰,並單擊下一個按鈕時,序列號應該驗證..我使用下面的代碼爲此....我的方法驗證序列號的名稱是ValidateKey()....和im傳遞一個靜態值123456爲該方法和服務將返回此值的值爲假,,,,但我的安裝是進一步繼續操作,並即時得到警報消息框在我安裝的最後一步INNO設置序列號驗證失敗?

function ValidateSerialNumber: Boolean; 
var 
    WinHttpReq: Variant; 
begin 
    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); 
    WinHttpReq.Open('POST', 'http://localhost:1024/WebService1/Service.asmx?op=ValidateMe', False); 
    WinHttpReq.Send('123456'); 

    if WinHttpReq.Status <> 200 then 
    begin 
    Result := False; 
    end 
    else 
    begin 
    Result := True; 
    end; 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
begin 
    Result := True; 

    if CurPageID = SerialPage.ID then 
    begin 
    Result := ValidateSerialNumber; 
    end; 
end; 

在這裏,我想安裝停止,當用戶點擊下一步按鈕,如果服務返回false,如果服務返回true,那麼他就可以進一步安裝,我在哪裏錯了?

回答

1

您需要驗證NextButtonClick事件方法中的序列號。如果驗證失敗,請保留在自定義頁面上,將False值賦予Result變量。如果您想讓嚮導繼續,請將True分配給該事件方法的Result。事情是這樣的:

function ValidateSerialNumber(const SerialNumber: string): Boolean; 
var 
    WinHttpReq: Variant; 
begin 
    Result := False; 

    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); 
    WinHttpReq.Open('POST', 'http://localhost:1024/WebService1/Service.asmx?op=ValidateMe', False); 
    WinHttpReq.Send(SerialNumber); 

    Result := WinHttpReq.Status = 200; 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    SerialNumber: string; 
begin 
    Result := True; 

    if CurPageID = SerialPage.ID then 
    begin 
    SerialNumber := GetSerialNumber('-'); 
    Result := ValidateSerialNumber(SerialNumber); 
    end; 
end; 
+0

是thanku ...這是工作正常,但有小問題,當它是假的,我想在屏幕上顯示的消息不是一個有效的序列碼給用戶,還怎麼第一件事我可以得到由用戶輸入的序列號並將其存儲在變量中嗎?...我編輯了我的問題,其中包含我所做的更改 – sebastian

+0

正確的方法是詢問另一個問題。這個問題問如何當用戶點擊下一個按鈕時如何停止,如果服務返回False,我已經回答並且已經接受了。這次我會擴大我的答案,但請不要這樣做。每個帖子應該有一個問題。此外,接受答案意味着該帖子解決了你的問題,這也意味着你不會在那之後改變問題。謝謝! – TLama

+0

你想要哪種格式的序列號?用來獲取輸入字符串的'GetSerialNumber'支持分隔符char。或者你有什麼不同的要求? – TLama