2013-08-25 48 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