Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
Windows 验证用户';Inno安装程序中的密码_Windows_Inno Setup - Fatal编程技术网

Windows 验证用户';Inno安装程序中的密码

Windows 验证用户';Inno安装程序中的密码,windows,inno-setup,Windows,Inno Setup,我的要求是验证用户输入的密码是否是登录时使用的正确密码。所以,我写了下面的代码,但它总是说“未登录”。有什么帮助吗 var 域名,用户名,BackardSlashString,域名用户名:字符串; ServerDetailsInputPage:TInputQueryWizardPage; hToken,LoginOk:整数; 函数LogonUser(lpszUsername,lpszDomain,lpszPassword:string; dwLogonType,dwLogonProvider:I

我的要求是验证用户输入的密码是否是登录时使用的正确密码。所以,我写了下面的代码,但它总是说“未登录”。有什么帮助吗

var
域名,用户名,BackardSlashString,域名用户名:字符串;
ServerDetailsInputPage:TInputQueryWizardPage;
hToken,LoginOk:整数;
函数LogonUser(lpszUsername,lpszDomain,lpszPassword:string;
dwLogonType,dwLogonProvider:INTEGER;var hToken:INTEGER):整数;
外部的LogonUserA@advapi32.dllstdcall';
过程初始化Wizard();
开始
域名:=ExpandConstant(GetEnv('USERDOMAIN'));
用户名:=ExpandConstant(+GetUserNameString);
BackwardSlashString:='\'
DomainUserName:=DomainName+BackardSlashString+UserName;
ServerDetailsInputPage:=
CreateInputQueryPage(wpWelcome,'','',请输入以下数据并单击下一步');
ServerDetailsInputPage.Add('IP地址',False);
ServerDetailsInputPage.Add('端口号',False);
ServerDetailsInputPage.Add('Domain Name\User Name',False);
ServerDetailsInputPage.Add('Password',True);
ServerDetailsInputPage.Values[1]:=“80”;
ServerDetailsInputPage.Values[2]:=DomainUserName;
结束;
函数RunAsUser():BOOLEAN;
变量
Passwd:字符串;
开始
域名:=ExpandConstant(GetEnv('USERDOMAIN'));
用户名:=ExpandConstant(+GetUserNameString);
Passwd:=ServerDetailsInputPage.Values[3];
LoginOk:=LogonUser(用户名、域名、密码、1,0、hToken);
如果(不是(LoginOk=0)),则
开始
MsgBox('成功登录',MB信息,MB_OK);
结果:=真;
结束
否则,如果(LoginOk=0),则
开始
MsgBox(“未登录”,MB信息,MB_正常);
结果:=假;
结束;
结束;
函数NextButtonClick(CurPageID:Integer):布尔值;
开始
结果:=真;
如果CurPageID=ServerDetailsInputPage.ID,则
开始
如果不是RunAsUser那么
开始
MsgBox('请输入正确的密码!',mbError,MB_OK);
结果:=假;
结束;
结束;
结束;
函数InitializeSetup():Boolean;
变量
路径:字符串;
结果代码:整数;
FXStopStatus:布尔值;
开始
结果:=真;
结束;
首先,您的函数原型及其调用都是错误的。不能混合函数原型的数据类型,也不能在函数调用中使用任意值。您可以使用类似以下内容:

[代码]
#ifdef UNICODE
#定义AW“W”
#否则
#定义“A”
#恩迪夫
常数
LOGON32\u LOGON\u INTERACTIVE=2;
LOGON32\u LOGON\u NETWORK=3;
LOGON32\u LOGON\u批=4;
LOGON32\u LOGON\u SERVICE=5;
LOGON32\u LOGON\u UNLOCK=7;
LOGON32\u LOGON\u NETWORK\u CLEARTEXT=8;
LOGON32\u LOGON\u NEW\u凭证=9;
LOGON32\u提供程序\u默认值=0;
LOGON32\u提供者\u WINNT40=2;
LOGON32\u提供者\u WINNT50=3;
错误\成功=0;
错误\登录\失败=1326;
函数LogonUser(lpszUsername,lpszDomain,lpszPassword:string;
dwLogonType,dwLogonProvider:DWORD;var phToken:THandle):BOOL;
外部“LogonUser{#AW}@advapi32.dll stdcall”;
变量
ServerDetailsPage:TInputQueryWizardPage;
函数TryLogonUser(const域、用户名、密码:字符串;
变量错误代码:Longint):布尔值;
变量
代币:坦德尔;
开始
结果:=LogonUser(用户名、域、密码、LOGON32\u登录\u交互、,
LOGON32\u提供者\u默认值,令牌);
错误代码:=DLLGetLastError;
结束;
程序初始化;
变量
用户名:字符串;
开始
用户名:=AddBackslash(GetEnv('USERDOMAIN'))+GetUserNameString;
ServerDetailsPage:=CreateInputQueryPage(wpWelcome,
'',''请输入以下数据并单击下一步');
ServerDetailsPage.Add('IP地址',False);
ServerDetailsPage.Add('端口号',False);
ServerDetailsPage.Add('Domain Name\User Name',False);
ServerDetailsPage.Add('Password',True);
ServerDetailsPage.Values[1]:=“80”;
ServerDetailsPage.Values[2]:=用户名;
结束;
过程ParseDomainUserName(常量值:字符串;变量域,
用户名:字符串);
变量
DelimPos:整数;
开始
DelimPos:=Pos('\',Value);
如果DelimPos=0,则
开始
域:=';
用户名:=值;
结束
其他的
开始
域:=Copy(值1,DelimPos-1);
用户名:=Copy(值,DelimPos+1,MaxInt);
结束;
结束;
函数ServerDetailsLogonUser:布尔值;
变量
域:字符串;
用户名:字符串;
密码:字符串;
错误代码:Longint;
开始
ParseDomainUserName(ServerDetailsPage.Values[2],域,用户名);
密码:=ServerDetailsPage.Values[3];
结果:=TryLogonUser(域、用户名、密码、错误代码);
案例错误代码
错误\u成功:
MsgBox('Logon successful!',mbInformation,MB_OK);
错误\登录\失败:
MsgBox('用户名或密码不正确!',mbError,MB_OK);
其他的
MsgBox('登录失败!'+#13#10+系统错误消息(DLLGetLastError),
b错误,b_正常);
结束;
结束;
函数NextButtonClick(CurPageID:Integer):布尔值;
开始
结果:=真;
如果CurPageID=ServerDetailsPage.ID,则
结果:=ServerDetailsLogonUser;
结束;

这毫无意义。用户已经提供了登录Windows并首先运行安装程序所需的有效密码。一个要求用户密码的安装程序会引起很多警钟,确保你的“取消”按钮工作正常。接受答案后,你可以发布答案。完成。我稍微修改了您的脚本,并为
Domain\UserName
编辑字段输入添加了解析器。如果登录函数成功,则那里的
TryLogonUser
函数返回True,否则返回False。它还返回更重要的
ErrorCode
参数,该参数指示发生了什么错误(如果有)。如果出现
ERROR\u LOGON\u FAILURE
,则用户名或密码错误;如果
ERROR\u SUCCESS
,则登录成功(返回的值也表示为True)。如果