你可以参考MSDN,使用NetShareAdd函数
下面的代码集供参考,相关的声明参考MSDN
Function CreateShare( ServerName : String; NetName : String; ShareType : LongWord; Re : String; Permissions : LongWord; Max_Uses : LongWord; Current_Uses : LongWord; Path : String; Password : String ) : Boolean;
Var
   Parm_Err   : LongWord;
   Buf        : Pointer;
   Share_Info : TShare_Info_2;
   wServer    : WideString;
   wNetName   : WideString;
   wRe    : WideString;
   wPath      : WideString;
   wPassword  : WideString;
Begin
     wServer                 := ServerName;
     wNetName                := NetName;
     wRe                 := Re;
     wPath                   := Path;
     wPassword               := Password;
     Parm_Err                := 0;
     Share_Info.NetName      := PWideChar( wNetName );
     Share_Info._Type        := ShareType;
     Share_Info.Re       := PWideChar( wRe );
     Share_Info.Permissions  := Permissions;
     Share_Info.Max_Uses     := Max_Uses;
     Share_Info.Current_Uses := Current_Uses;
     Share_Info.Path         := PWideChar( wPath );
     Share_Info.Password     := PWideChar( wPassword );
     Buf                     := @Share_Info;
     Result                  := NetShareAdd( PWideChar( wServer ), 2, Buf, Parm_Err ) = 0;
End;

解决方案 »

  1.   

    可是netshareadd只适合nt,98不支持
      

  2.   

    uses Registry
    var reg : TRegistry; name : String; //s是在网上邻居里的文件夹名
    begin
      name := 'DirName';//建立一个只读,无密码共享目录
      reg := TRegistry.Create;
      reg.RootKey := HKEY_LOCAL_MACHINE;
      reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Network\LanMan\'+name,true );
      reg.WriteInteger( 'Flags', 401 ) ; //权限:401代表为访问,258为完全访问,259为密码访问
      reg.WriteInteger( 'Parm1enc', 0 ) ;  //参数2,放置完全访问密码,已加密
      reg.WriteInteger( 'Parm2enc', 0 ) ;  //参数2,放置只读访问密码,已加密
      reg.WriteString( 'Path', 'C:\MYDIR' ) ; //放置要共享的目录的绝对路径
      reg.WriteString( 'Re', '' ) ;
      reg.WriteInteger( 'Type', 0 ) ; 
    end;
      

  3.   

    下面的代码并未成功,只差一点点,返回值是2116(NERR_UnKnownDevDir),可是我设置的path是存在的,并且已大写,还望大家多帮忙啊!type
      PUSER_INFO_1 = ^SHARE_INFO_50;
      SHARE_INFO_50=Record
        netname:array [0..NETNAME_LEN-1] of Char;
        sharetype:SMALLINT;
        flags:SmallInt;
        re:PChar;
        path:PChar;
        rw_password:array [0..PASSWORD_LEN-1] of Char;
        ro_password:array [0..PASSWORD_LEN-1] of Char;
      End;
    var  Buf: PUSER_INFO_1;
    begin
      GetMem(Buf, Sizeof(Buf));
      with Buf^ do  begin
       Buf.netname := 'PUBLIC';
       Buf.sharetype := STYPE_DISKTREE;
       Buf.flags := SHI50F_FULL;    
       Buf.re := nil;
       Buf.path := pchar('E:\PUBLIC');
       Buf.rw_password := '0';
       Buf.ro_password :='0';
        
      end;
      showmessage(inttostr(NetShareAdd(NIL,50, Pointer(Buf), sizeof(SHARE_INFO_50))));
      FreeMem(Buf);
      

  4.   

    to cg1120
    你的方法要重新启动系统,我的程序是不希望这样的
      

  5.   

    WinExec(pchar('net.exe share '+ShareName+'='+SharePath),SW_HIDE)=33    //33代表正确返回2000下可以这样做。98没试。