PDA

View Full Version : Share کردن یک Folder



ara_prg
شنبه 02 آبان 1383, 12:43 عصر
چطور میشه با دلفی یک Folder را Share کرد و یا آن را از حالت Share خارج کرد بطوری که کاربران شبکه بتوانند به آن Folder دسترسی پیدا کنند :گیج:

mkalone
شنبه 02 آبان 1383, 14:08 عصر
سلام

اگر منظورت Share کردن یک فولدر است باید از دستورات Net Share

در ویندوز 2000 و XP است .

NET SHARE tst="f:\test folder"

برای حذف فولدر از Share

NET SHARE tst /delete



ShellExecute function(in ShellAPI unit).



مهرداد

mkalone
شنبه 02 آبان 1383, 14:09 عصر
از این هم می توانی استفاده کنی
:
من تست نکرده ام

function NetShareAdd(servername:LPTSTR; level:DWORD; buf:LPBYTE; parm_err:LPDWORD): NET_API_STATUS; external ´netapi32´;

nasr
شنبه 02 آبان 1383, 14:31 عصر
این کدها اینطوری زیبا تر است :)

function NetShareAdd(servername:LPTSTR; level:DWORD; buf:LPBYTE; parm_err:LPDWORD): NET_API_STATUS; external ´netapi32´;

مهدی کرامتی
شنبه 02 آبان 1383, 14:48 عصر
از تابع WNetAddConnection2 استفاده کنید. مثال:

function MapDrive(UNCPath,UserName,PassWord,MapDrive:string ):integer;
var
NwR : TNetResource;
begin
with NwR do begin
dwType := RESOURCETYPE_ANY ;
lpLocalName := PChar(MapDrive);
lpRemoteName:= PChar(UNCPath);
lpProvider := 'NetWare- or compatible network';
end;
Result := WNetAddConnection2(NwR, PChar(PassWord), PChar(UserName), 0);
end;

اطلاعات بیشتر:
<span dir=ltr>

http://groups.google.com/groups?hl=en&amp;lr=&amp;q=WNetAddConnection2&amp;meta=group%3 Dborland.public.delphi.*</p></span>

مهدی کرامتی
شنبه 02 آبان 1383, 14:49 عصر
بابا ای والله بخش دلفی!

تا من پست کنم 3 تا پست جدید رسیده :wise1:

مهدی کرامتی
شنبه 02 آبان 1383, 16:14 عصر
تحقیقات بیشتر:

پست قبلی نحوه Map کردن یک درایو به فولدری که از قبل Share شده است را نمایش میدهد.

برای Share کردن یک فولدر از تابع NetShareAdd استفاده میشود:

unit uTB_Share;

interface

uses windows, Classes, SysUtils;

resourcestring
SWin32Error = 'Win32-Error. Code&#58; %d.'#10'%s';

type
SHARE_INFO_502 = record
shi502_netname &#58; PWChar;
shi502_type &#58; Integer;
shi502_remark &#58; PWChar;
shi502_permissions &#58; Integer;
shi502_max_uses &#58; Integer;
shi502_current_uses &#58; Integer;
shi502_path &#58; PWChar;
shi502_passwd &#58; PChar;
shi502_reserved &#58; Integer;
shi502_security_descriptor &#58; PSECURITY_DESCRIPTOR;
end;
NetAPIStatus = Integer;
TShareTypes = &#40; stDisk, stPrintQueue, stCommDevice, stIPC &#41;;

function CreateShare&#40;machineW, netName, comment, path &#58; Widestring;
MaxConnections&#58; DWord; Sharetype &#58;TShareTypes &#41;&#58; DWord;

function NetShareAdd &#40;serverName &#58; PWChar; level &#58; cardinal; buf &#58;
PChar; parm_err &#58; PDWord&#41; &#58; NetAPIStatus; stdcall;
procedure FillShareInfo&#40;var share &#58; SHARE_INFO_502; netName, comment,
path &#58; Widestring; MaxConnections&#58; DWord; FShareType &#58; TShareTypes&#41;;
procedure RaiseWin32Error&#40;errorCode &#58; DWord&#41;;

implementation

const
STYPE_DISKTREE =0;
STYPE_PRINTQ =1;
STYPE_DEVICE =2;
STYPE_IPC =3;

function NetShareAdd; external 'NETAPI32.DLL';

function CreateShare&#40;machineW, netName, comment, path &#58; Widestring;
MaxConnections&#58; DWord; Sharetype &#58;TShareTypes &#41;&#58; DWord;

var share &#58; SHARE_INFO_502;

begin
FillShareInfo&#40;share, netName, comment, path, MaxConnections,
ShareType&#41;;
result&#58;= NetShareAdd&#40;PWideChar&#40;machineW&#41;,502,@share,nil&#41;;
if result &lt;> 0 then RaiseWin32Error&#40;result&#41;;
end;

procedure FillShareInfo&#40;var share &#58; SHARE_INFO_502; netName, comment,
path &#58; Widestring; MaxConnections&#58; DWord; FShareType &#58; TShareTypes&#41;;
begin
&#123; Fill the SHARE_INFO_502 with our settings &#125;
FillChar&#40;share,SizeOf&#40;SHARE_INFO_502&#41;,0&#41;;
share.shi502_netname&#58;= PWideChar&#40;netName&#41;;
case FShareType of
stDisk &#58; share.shi502_type&#58;= STYPE_DISKTREE;
stPrintQueue &#58; share.shi502_type&#58;= STYPE_PRINTQ;
stCommDevice &#58; share.shi502_type&#58;= STYPE_DEVICE;
stIPC &#58; share.shi502_type&#58;= STYPE_IPC;
end;
share.shi502_type&#58;= share.shi502_type or 0;
share.shi502_remark&#58;= PWideChar&#40;comment&#41;;
share.shi502_max_uses&#58;= MaxConnections;
share.shi502_path&#58;= PWideChar&#40;path&#41;;
end;

procedure RaiseWin32Error&#40;errorCode &#58; DWord&#41;;
var
error &#58; EWin32Error;
begin
if errorCode &lt;> 0 then
begin
error&#58;=
EWin32Error.CreateResFmt&#40;@SWin32Error,&#91;errorCode,S ysErrorMessage&#40;errorCode&#41;&#93;&#41;;
error.ErrorCode&#58;= errorCode;
raise error;
end;
end;
end.

مثال:

CreateShare&#40;'',
'Temp Files',
'Here is a temporary repository',
'C&#58;\Temp',
5,
stDisk&#41;;

یونیت uTB_Share و مثال مربوطه نیز ضمیمه شده است.

پریسا نامدار
یک شنبه 03 آبان 1383, 00:13 صبح
خیلی ممنون از مطالب مفیدتون. :flower: :flower:

ara_prg
یک شنبه 03 آبان 1383, 09:19 صبح
:تشویق: :تشویق: :تشویق:

از همه دوستان بسیار متشکرم :flower:

nasr
یک شنبه 16 دی 1386, 08:47 صبح
تحقیقات بیشتر:

پست قبلی نحوه Map کردن یک درایو به فولدری که از قبل Share شده است را نمایش میدهد.

برای Share کردن یک فولدر از تابع NetShareAdd استفاده میشود:

unit uTB_Share;

interface

uses windows, Classes, SysUtils;

resourcestring
SWin32Error = 'Win32-Error. Code: %d.'#10'%s';

type
SHARE_INFO_502 = record
shi502_netname : PWChar;
shi502_type : Integer;
shi502_remark : PWChar;
shi502_permissions : Integer;
shi502_max_uses : Integer;
shi502_current_uses : Integer;
shi502_path : PWChar;
shi502_passwd : PChar;
shi502_reserved : Integer;
shi502_security_descriptor : PSECURITY_DESCRIPTOR;
end;
NetAPIStatus = Integer;
TShareTypes = ( stDisk, stPrintQueue, stCommDevice, stIPC );

function CreateShare(machineW, netName, comment, path : Widestring;
MaxConnections: DWord; Sharetype :TShareTypes ): DWord;

function NetShareAdd (serverName : PWChar; level : cardinal; buf :
PChar; parm_err : PDWord) : NetAPIStatus; stdcall;
procedure FillShareInfo(var share : SHARE_INFO_502; netName, comment,
path : Widestring; MaxConnections: DWord; FShareType : TShareTypes);
procedure RaiseWin32Error(errorCode : DWord);

implementation

const
STYPE_DISKTREE =0;
STYPE_PRINTQ =1;
STYPE_DEVICE =2;
STYPE_IPC =3;

function NetShareAdd; external 'NETAPI32.DLL';

function CreateShare(machineW, netName, comment, path : Widestring;
MaxConnections: DWord; Sharetype :TShareTypes ): DWord;

var share : SHARE_INFO_502;

begin
FillShareInfo(share, netName, comment, path, MaxConnections,
ShareType);
result:= NetShareAdd(PWideChar(machineW),502,@share,nil);
if result &lt;> 0 then RaiseWin32Error(result);
end;

procedure FillShareInfo(var share : SHARE_INFO_502; netName, comment,
path : Widestring; MaxConnections: DWord; FShareType : TShareTypes);
begin
{ Fill the SHARE_INFO_502 with our settings }
FillChar(share,SizeOf(SHARE_INFO_502),0);
share.shi502_netname:= PWideChar(netName);
case FShareType of
stDisk : share.shi502_type:= STYPE_DISKTREE;
stPrintQueue : share.shi502_type:= STYPE_PRINTQ;
stCommDevice : share.shi502_type:= STYPE_DEVICE;
stIPC : share.shi502_type:= STYPE_IPC;
end;
share.shi502_type:= share.shi502_type or 0;
share.shi502_remark:= PWideChar(comment);
share.shi502_max_uses:= MaxConnections;
share.shi502_path:= PWideChar(path);
end;

procedure RaiseWin32Error(errorCode : DWord);
var
error : EWin32Error;
begin
if errorCode &lt;> 0 then
begin
error:=
EWin32Error.CreateResFmt(@SWin32Error,[errorCode,SysErrorMessage(errorCode)]);
error.ErrorCode:= errorCode;
raise error;
end;
end;
end.
مثال:

CreateShare('',
'Temp Files',
'Here is a temporary repository',
'C:\Temp',
5,
stDisk);
یونیت uTB_Share و مثال مربوطه نیز ضمیمه شده است.


سلام
ضمن تشکر
چطور میشه یه فولدر را از Share خارج کرد

ممنون

nasr
سه شنبه 10 اردیبهشت 1387, 08:53 صبح
سلام

کسی نمی دونه چطور باید فولد را از Share بودن خارج کرد؟