Ja in der Tat, hinter dem
IP Eintrag war ein Leerzeichen somit war der Netzwerkpfad falsch, Problem behoben
ich DUSSEL
ABER, ABER ein neues Problem ist aufgetaucht. Ich setze auf Rechner A die Freigabe mit meinem Client, dazu verwende ich folgenen Code hier aus dem Forum.
Delphi-Quellcode:
const
SType_DiskTree = 0;
Access_Read = 1;
Access_All = 127;
Nerr_Success = 0;
type
TShareInfo2ExW = record
shi2_NetName: PWideChar;
shi2_Type: Longword;
shi2_Remark: PWideChar;
shi2_Permissions: Longword;
shi2_Max_Uses: Longword;
shi2_Current_Uses: Longword;
shi2_Path: PWideChar;
shi2_Passwd: PWideChar;
end;
type
NET_API_STATUS = DWORD;
TShareInfo2ExA= record
shi2_NetName: PAnsiChar;
shi2_Type: Longword;
shi2_Remark: PAnsiChar;
shi2_Permissions: Longword;
shi2_Max_Uses: Longword;
shi2_Current_Uses: Longword;
shi2_Path: PAnsiChar;
shi2_Passwd: PAnsiChar;
end;
type
TNetShareAddFunc = function (servername: PChar; level: Longword;
const buf: Pointer;
parm_err: PLongWord): LongWord; stdcall;
function NetShareDel(
const servername : LPWSTR;
const netname : LPWSTR;
const reserved : DWORD) : NET_API_STATUS; stdcall; external 'netapi32.dll';
function ShareDirA(const ADir, AName, APassword: string; ReadOnly: Boolean): Boolean;
var
Info: TShareInfo2ExA;
Err: Longword;
Lib: THandle;
NetShareAddFunc: TNetShareAddFunc;
begin
Result:=False;
Lib:= LoadLibrary('Svrapi.dll');
if Lib <> 0 then
begin
try
@NetShareAddFunc:= GetProcAddress(Lib,'NetShareAdd');
if @NetShareAddFunc <> nil then
begin
FillChar(Info, SizeOf(Info), 0);
Info.shi2_netname := PAnsiChar(AName);
Info.shi2_type := SType_DiskTree;
Info.shi2_remark := nil;
if ReadOnly then
Info.shi2_permissions := Access_Read
else
Info.shi2_permissions := Access_All;
Info.shi2_max_uses := LongWord(-1);
Info.shi2_current_uses := 0;
Info.shi2_path := PAnsiChar(ADir);
Info.shi2_passwd := PAnsiChar(APassword);
Result := NetShareAddFunc(nil, 2, @Info, @Err) = NERR_SUCCESS;
end
else
RaiseLastOSError;
finally
FreeLibrary(Lib);
end;
end;
end;
function ShareDirW(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean;
var
Info: TShareInfo2ExW;
Err: Longword;
Lib: THandle;
NetShareAddFunc: TNetShareAddFunc;
begin
Result:=False;
Lib:= LoadLibrary('Netapi32.dll');
if Lib <> 0 then
begin
try
@NetShareAddFunc:= GetProcAddress(Lib,'NetShareAdd');
if @NetShareAddFunc <> nil then
begin
FillChar(Info, SizeOf(Info), 0);
Info.shi2_netname := PWideChar(AName);
Info.shi2_type := SType_DiskTree;
Info.shi2_remark := nil;
if ReadOnly then
Info.shi2_permissions := Access_Read
else
Info.shi2_permissions := Access_All;
Info.shi2_max_uses := LongWord(-1);
Info.shi2_current_uses := 0;
Info.shi2_path := PWideChar(ADir);
Info.shi2_passwd := PWideChar(APassword);
Result := NetShareAddFunc(nil, 2, @Info, @Err) = Nerr_Success;
end
else
RaiseLastOSError;
finally
FreeLibrary(Lib);
end;
end;
end;
function ShareDir(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean;
begin
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
Result := ShareDirA(ADir, AName, APassword, ReadOnly)
else
Result := ShareDirW(ADir, AName, APassword, ReadOnly);
end;
//Client-Verzeichnis freigeben
procedure Tfrm_main.FormCreate(Sender: TObject);
var
sPfad:String;
begin
sPfad := ExtractFileDir(Application.ExeName);
try
ShareDir(sPfad, 'Testfreigabe', '', True);
except
//
end;
soweit alles ok, möchte ich aber von Rechner B eine Datei in das freigegebene Verzeichnis von Rechner A kopieren kommt immer die Fehlermeldung "kein Zugriff" obwohl die Freigabe gesetzt und ok ist.
Delphi-Quellcode:
if not CopyFile(PChar(OpenDialog1.Filename), PChar('\\' + slIps.Strings[0] + '\Testfreigabe\' + ExtractFileName(OpenDialog1.Filename)), true) then
ShowMessage(SysErrorMessage(GetLastError));
Das komische dabei, mach ich die Freigabe über Windows per Hand funktioniert auch das anschließende kopieren in das Verzeichnis.