Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# INNO安装程序序列号验证失败?_C#_Validation_Inno Setup - Fatal编程技术网

C# INNO安装程序序列号验证失败?

C# INNO安装程序序列号验证失败?,c#,validation,inno-setup,C#,Validation,Inno Setup,我试图在webservice的帮助下验证服务器端用户输入的序列号,,,当用户输入序列号键并单击“下一步”按钮时,应该验证序列号..我使用了下面的代码..验证序列号的方法的名称是ValidateKey()..并且我为该方法和服务传递了一个静态值123456,该值将返回false,,,,但是我的安装正在继续,我在安装的最后一步收到了警报消息框 function ValidateSerialNumber: Boolean; var WinHttpReq: Variant; begin WinH

我试图在webservice的帮助下验证服务器端用户输入的序列号,,,当用户输入序列号键并单击“下一步”按钮时,应该验证序列号..我使用了下面的代码..验证序列号的方法的名称是ValidateKey()..并且我为该方法和服务传递了一个静态值123456,该值将返回false,,,,但是我的安装正在继续,我在安装的最后一步收到了警报消息框

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;
函数ValidateSerialNumber:布尔值;
变量
WinHttpReq:变体;
开始
WinHttpRequest:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpReq.Open('POST','http://localhost:1024/WebService1/Service.asmx?op=ValidateMe",假),;
WinHttpReq.Send('123456');
如果WinHttpReq.状态为200,则
开始
结果:=假;
结束
其他的
开始
结果:=真;
结束;
结束;
函数NextButtonClick(CurPageID:Integer):布尔值;
开始
结果:=真;
如果CurPageID=SerialPage.ID,则
开始
结果:=ValidateSerialNumber;
结束;
结束;

在这里,我想在用户单击“下一步”按钮时停止安装如果服务返回false,如果服务返回true,则他可以继续安装,我哪里出错了?

您需要从事件方法验证序列号。如果验证失败,请将
False
值指定给
结果
变量,以保持在自定义页面上。如果要让向导继续,请将
True
指定给该事件方法的
结果
。大概是这样的:

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;

是的,谢谢…这很好,但有一些小问题,当它是错误的时候,首先我想在屏幕上显示一条消息,而不是给用户一个有效的序列号,还有我怎样才能得到用户输入的序列号并将其存储在一个变量中?…我用修改编辑了我的问题。我正确的做法是问另一个问题。这个问题问如果服务返回False,当用户单击next按钮时如何停止,我已经回答了,您已经接受了。这次我将扩展我的答案,但请不要这样做。每个帖子应该有一个问题。此外,接受答案意味着帖子解决了你的问题,这也意味着你以后不会改变问题。谢谢您希望序列号采用哪种格式?获取输入字符串的
GetSerialNumber
支持分隔符字符。或者您有什么不同的要求吗?我做了一个更新,它显示了如何从我不久前编写代码的页面中获取并存储由
-
字符分隔的序列号。无论如何,当用户输入无效的序列号时,您是否认为web服务返回的状态与200不同?它不是返回状态200,而是回复文本中的答案?无论如何,这将是另一个问题的主题…非常感谢您抽出时间…现在一切都很好