我的要求是驗證用戶輸入的密碼是他登錄的正確密碼。所以,我寫了下面的代碼,但它總是說「沒有登錄」。任何幫助?在Inno Setup中驗證用戶的密碼
var
DomainName,UserName,BackwardSlashString,DomainUserName : String;
ServerDetailsInputPage : TInputQueryWizardPage;
hToken, LoginOk : INTEGER;
function LogonUser(lpszUsername,lpszDomain,lpszPassword: string;
dwLogonType,dwLogonProvider: INTEGER; var hToken: INTEGER): INTEGER;
external '[email protected] stdcall';
procedure InitializeWizard();
begin
DomainName:= ExpandConstant(GetEnv('USERDOMAIN'));
UserName := ExpandConstant(+GetUserNameString);
BackwardSlashString := '\'
DomainUserName := DomainName + BackwardSlashString + UserName;
ServerDetailsInputPage :=
CreateInputQueryPage(wpWelcome,'','','Please enter following data and click Next.');
ServerDetailsInputPage.Add('IP Address',False);
ServerDetailsInputPage.Add('Port Number',False);
ServerDetailsInputPage.Add('Domain Name\User Name',False);
ServerDetailsInputPage.Add('Password',True);
ServerDetailsInputPage.Values[1] := '80';
ServerDetailsInputPage.Values[2] := DomainUserName;
end;
function RunAsUser(): BOOLEAN;
var
Passwd : String;
begin
DomainName := ExpandConstant(GetEnv('USERDOMAIN'));
UserName := ExpandConstant(+GetUserNameString);
Passwd := ServerDetailsInputPage.Values[3];
LoginOk := LogonUser(UserName,DomainName,Passwd,1,0,hToken);
if (not (LoginOk=0)) then
begin
MsgBox('successfully logged-in', mbInformation, MB_OK);
Result := true;
end
else if (LoginOk=0) then
begin
MsgBox('Not logged-in', mbInformation, MB_OK);
Result := false;
end;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID = ServerDetailsInputPage.ID then
begin
if not RunAsUser then
begin
MsgBox('Please enter correct Password!', mbError, MB_OK);
Result:=False;
end;
end;
end;
function InitializeSetup(): Boolean;
var
PrevInstallPath : String;
ResultCode : Integer;
FXStopStatus : Boolean;
begin
Result:=True;
end;
這沒有任何意義。用戶已經提供了一個有效的密碼,需要登錄到Windows並讓您的安裝程序運行在第一位。要求輸入用戶密碼的安裝程序設置了許多警鈴,確保取消按鈕完美無缺。 – 2013-03-19 12:01:29
接受答案,你可以發佈答案。 – user1752602 2013-03-20 06:08:58
完成。我已經修改了你的腳本並添加了「Domain \ UserName」編輯字段輸入的解析器。如果登錄函數成功,那麼'TryLogonUser'函數返回True,否則返回False。它還返回更重要的'ErrorCode'參數,它指示發生了什麼錯誤(如果有的話)。如果你得到了'ERROR_LOGON_FAILURE',那麼用戶名或密碼是錯誤的,如果'ERROR_SUCCESS'登錄成功(返回True表示什麼)。如果發生不同的錯誤,登錄時出現其他錯誤。 – TLama 2013-03-20 11:00:39