使用Delphi创建Windows用户

5
我需要使用Delphi创建新的Windows管理员用户。
谢谢。

或者一个可以执行此操作的命令行实用程序 - zac
已使用net user解决,但如果有其他解决方案,请发布。谢谢。 - zac
2个回答

12

您可以使用在JEDI Headers中声明的NetUserAddNetUserSetGroups函数。

参见此简单示例。

program ProjectAddNewUser;

{$APPTYPE CONSOLE}

uses
  JclWin32,//Jedi Library
  Windows,
  SysUtils;


function CreateWinUser(const wServer, wUsername, wPassword, wGroup:WideString): Boolean;
var
  Buf       : USER_INFO_2;//Buf for the new user info
  Err       : NET_API_STATUS;
  ParmErr   : DWORD;
  GrpUsrInfo: USER_INFO_0;//Buf for the group
  wDummyStr : WideString;
begin
  wDummyStr:='';
  FillChar (Buf, SizeOf(USER_INFO_2), 0);
  with Buf do
  begin
    usri2_name      := PWideChar(wUsername);
    usri2_full_name := PWideChar(wUsername);//You can add a more descriptive name here
    usri2_password  := PWideChar(wPassword);
    usri2_comment   := PWideChar(wDummyStr);
    usri2_priv      := USER_PRIV_USER;
    usri2_flags     := UF_SCRIPT OR UF_DONT_EXPIRE_PASSWD;
    usri2_script_path := PWideChar(wDummyStr);
    usri2_home_dir    := PWideChar(wDummyStr);
    usri2_acct_expires:= TIMEQ_FOREVER;
  end;

  GrpUsrInfo.usri0_name:=PWideChar(wGroup);

  Err := NetUserAdd(PWideChar(wServer), 1, @Buf, @ParmErr);
  Result := (Err = NERR_SUCCESS);

  if Result then //NOw you must set the group for the new user
  begin
  Err := NetUserSetGroups(PWideChar(wServer),PWideChar(wGroup),0,@GrpUsrInfo,1);
  Result := (Err = NERR_SUCCESS);
  end;
end;

begin

  if CreateWinUser('localhost', 'MyNewUser','ThePassword','MyWindowsGroup') then
   Writeln('Ok')
  else
   Writeln('False');

  Readln;
end.

@RRUZ:我正在尝试这段代码,但在NetUserSetGroups上出现错误2220(找不到组名)。我正在尝试创建一个带有“管理员”组的用户。 - Beto Neto
2
为使其与本地“管理员”组配合工作,我不得不更改三行代码。GrpUserInfo:USER_INFO_0 变成了 LOCALGROUP_MEMBERS_INFO_3GrpUserInfo.usri0_name:=PWideChar(wGroup) 变成了 GrpUsrInfo.lgrmi3_domainandname := PWideChar(wUsername)。并且 Err := NetUserSetGroups(PWideChar(wServer),PWideChar(wGroup),0,@GrpUsrInfo,1) 变成了 Err := NetLocalGroupAddMembers(PWideChar(wServer), PWideChar(wGroup), 3, @GrpUsrInfo, 1) - James L.

1

我认为你需要调用的API是NetUserAdd

首先,检查Delphi是否提供了对此调用的包装器。如果没有,您将不得不自己编写。如果您不知道如何从Delphi进行Windows API调用,则需要进行更多的研究。


+1,我找不到它。我有一种感觉Delphi可以直接调用这些函数,假设它们匹配正确的调用约定...像你一样,我也不知道。 - user257111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接