Ana789 Posted September 18, 2013 at 05:25 PM Report #525060 Posted September 18, 2013 at 05:25 PM olá, Alguém sabe como partilhar uma pasta em delphi? Estou a usar o Delphi 2010. Já experimentei alguns exemplos que encontrei, a pasta fica partilhada, mas fica inacessivel ao tentar aceder a partir de outros pc em rede.
nunopicado Posted September 18, 2013 at 05:29 PM Report #525062 Posted September 18, 2013 at 05:29 PM Como assim? Queres criar uma partilha de Windows a partir de um software em Delphi? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
apocsantos Posted September 18, 2013 at 06:59 PM Report #525079 Posted September 18, 2013 at 06:59 PM Boa noite, Se queres criar uma utilizando a implementação que o MS Windows traz, do protocolo SMB, vais ter algumas dificuldades a lidar com previlégios necessários à tua aplicação. Se procurares bem, vais ver que encontras algumas implementações que funcionam, pelo menos no Windows 7. type SHARE_INFO_2 = record shi2_netname : pWideChar; shi2_type : DWORD; shi2_remark : pWideChar; shi2_permissions : DWORD; shi2_max_uses : DWORD; shi2_current_uses: DWORD; shi2_path : pWideChar; shi2_passwd : pWideChar; end; PSHARE_INFO_2 = ^SHARE_INFO_2; const NERR_SUCCESS = 0; STYPE_DISKTREE = 0; STYPE_PRINTQ = 1; STYPE_DEVICE = 2; STYPE_IPC = 3; ACCESS_READ = $01; ACCESS_WRITE = $02; ACCESS_CREATE = $04; ACCESS_EXEC = $08; ACCESS_DELETE = $10; ACCESS_ATRIB = $20; ACCESS_PERM = $40; ACCESS_ALL = ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or ACCESS_EXEC or ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM; function NetShareAdd(servername: pWideChar; level: DWORD; buf: PBYTE; parm_err: PDWORD): NET_API_STATUS; stdcall; external 'NetAPI32.dll' name 'NetShareAdd'; {Implementação} procedure TForm1.Button2Click(Sender: TObject); var AShareInfo : PSHARE_INFO_2; parmError : DWORD; begin CreateDir('D:\test_folder'); AShareInfo := New(PSHARE_INFO_2); try with AShareInfo^ do begin shi2_netname := WideString('Test_sharing'); shi2_type := STYPE_DISKTREE; shi2_remark := nil; shi2_permissions := ACCESS_ALL; shi2_max_uses := DWORD(-1); // Maximum allowed shi2_current_uses:= 0; shi2_path := WideString('D:\test_folder'); shi2_passwd := nil; end; if (NetShareAdd(nil, 2, PBYTE(AShareInfo), @parmError) <> NERR_SUCCESS)then ShowMessage(IntToStr(parmError)); finally FreeMem(AShareInfo, SizeOf(PSHARE_INFO_2)); end; end; {disponivel no torry's delphi page} Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Ana789 Posted September 19, 2013 at 08:30 AM Author Report #525109 Posted September 19, 2013 at 08:30 AM Sim quero criar uma partilha de Windows a partir de um software em Delphi. Obrigado ApocSantos, já experimentei o seu exemplo, mas ao tentar aceder à pasta partilhada por outro pc dá acesso negado.
apocsantos Posted September 19, 2013 at 10:13 AM Report #525128 Posted September 19, 2013 at 10:13 AM Bom dia, Dependendo da versão do Windows, tal como tinha indicado, vão aparecer problemas com a segurança do Windows e com a autenticação. Penso que não se trantando de uma rede onde exista um controlador de dominio e um dominio ActiveDirectory, as maquinas têm de se autenticar umas nas outras. Mas isso são configurações do Windows. O primeiro teste que eu faria, era deixar a aplicação criar a pasta partilhada e depois em vez de aceder directamente no "My Computer", executar o comando net use \\nome_da_maquina\nome_da_partilha, e ver se a partilha funciona. Se funcionar já se tem um ponto de partida, para resolver o problema, se não funcionar também se fica com um bom ponto de partida para encontrar uma solução. Cordiais cumprimentos, Apocsantos 2 Report "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
antseq Posted September 19, 2013 at 12:38 PM Report #525156 Posted September 19, 2013 at 12:38 PM Dependendo da versão do Windows, tal como tinha indicado, vão aparecer problemas com a segurança do Windows e com a autenticação. Penso que não se trantando de uma rede onde exista um controlador de dominio e um dominio ActiveDirectory, as maquinas têm de se autenticar umas nas outras. Mas isso são configurações do Windows. Excelente explicação. O que quer dizer, que mesmo que funcione no seu (Ana789) ambiente de produção, com o seu Windows, com os seus computadores, com a sua rede (c/ ou s/ domínio) pode não ser 100% garantido que funcione em todas as situações, visto que vai depender do sistema e configurações do cliente final. Não sei qual será o objectivo de criar a tal partilha, mas se fosse eu deixava a parte de criar a partilha para um procedimento "manual" de instalação, dependendo do Windows (ou vários Windows de versões diferentes que o cliente tenha instalado no seu parque de máquinas). 1 Report
Gilson Nunes Posted September 23, 2013 at 10:12 PM Report #525623 Posted September 23, 2013 at 10:12 PM Excelente explicação. O que quer dizer, que mesmo que funcione no seu (Ana789) ambiente de produção, com o seu Windows, com os seus computadores, com a sua rede (c/ ou s/ domínio) pode não ser 100% garantido que funcione em todas as situações, visto que vai depender do sistema e configurações do cliente final. Não sei qual será o objectivo de criar a tal partilha, mas se fosse eu deixava a parte de criar a partilha para um procedimento "manual" de instalação, dependendo do Windows (ou vários Windows de versões diferentes que o cliente tenha instalado no seu parque de máquinas). concordo!
Jessé Gestin Posted March 13, 2014 at 06:30 PM Report #548519 Posted March 13, 2014 at 06:30 PM Boa noite, Se queres criar uma utilizando a implementação que o MS Windows traz, do protocolo SMB, vais ter algumas dificuldades a lidar com previlégios necessários à tua aplicação. Se procurares bem, vais ver que encontras algumas implementações que funcionam, pelo menos no Windows 7. type SHARE_INFO_2 = record shi2_netname : pWideChar; shi2_type : DWORD; shi2_remark : pWideChar; shi2_permissions : DWORD; shi2_max_uses : DWORD; shi2_current_uses: DWORD; shi2_path : pWideChar; shi2_passwd : pWideChar; end; PSHARE_INFO_2 = ^SHARE_INFO_2; const NERR_SUCCESS = 0; STYPE_DISKTREE = 0; STYPE_PRINTQ = 1; STYPE_DEVICE = 2; STYPE_IPC = 3; ACCESS_READ = $01; ACCESS_WRITE = $02; ACCESS_CREATE = $04; ACCESS_EXEC = $08; ACCESS_DELETE = $10; ACCESS_ATRIB = $20; ACCESS_PERM = $40; ACCESS_ALL = ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or ACCESS_EXEC or ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM; function NetShareAdd(servername: pWideChar; level: DWORD; buf: PBYTE; parm_err: PDWORD): NET_API_STATUS; stdcall; external 'NetAPI32.dll' name 'NetShareAdd'; {Implementação} procedure TForm1.Button2Click(Sender: TObject); var AShareInfo : PSHARE_INFO_2; parmError : DWORD; begin CreateDir('D:\test_folder'); AShareInfo := New(PSHARE_INFO_2); try with AShareInfo^ do begin shi2_netname := WideString('Test_sharing'); shi2_type := STYPE_DISKTREE; shi2_remark := nil; shi2_permissions := ACCESS_ALL; shi2_max_uses := DWORD(-1); // Maximum allowed shi2_current_uses:= 0; shi2_path := WideString('D:\test_folder'); shi2_passwd := nil; end; if (NetShareAdd(nil, 2, PBYTE(AShareInfo), @parmError) <> NERR_SUCCESS)then ShowMessage(IntToStr(parmError)); finally FreeMem(AShareInfo, SizeOf(PSHARE_INFO_2)); end; end; {disponivel no torry's delphi page} Cordiais cumprimentos, Apocsantos Muito bom seu post! Estou com um erro: [DCC Error] Unit27.pas(95): E2003 Undeclared identifier: 'NET_API_STATUS' Alguma dica ? Estou tentando compartilhar uma pasta na rede, via linha de código Delphi Abraços !
nunopicado Posted March 13, 2014 at 06:36 PM Report #548520 Posted March 13, 2014 at 06:36 PM (edited) Muito bom seu post! Estou com um erro: [DCC Error] Unit27.pas(95): E2003 Undeclared identifier: 'NET_API_STATUS' Alguma dica ? Estou tentando compartilhar uma pasta na rede, via linha de código Delphi Abraços ! Experimenta incluir esta unit: http://svn.nldelphi.com/nldelphi/opensource/ngln/NetAPI.pas (precisarás da dll netapi32.dll: http://download.dll-files.com/8ce1a6d16b9077e91e192499eb611c5f/netapi32.zip?0WLgUBYKkO) Edited March 13, 2014 at 06:38 PM by nunopicado "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Jessé Gestin Posted March 14, 2014 at 07:12 PM Report #548638 Posted March 14, 2014 at 07:12 PM Experimenta incluir esta unit: http://svn.nldelphi.com/nldelphi/opensource/ngln/NetAPI.pas (precisarás da dll netapi32.dll: http://download.dll-files.com/8ce1a6d16b9077e91e192499eb611c5f/netapi32.zip?0WLgUBYKkO) Boa tarde ! Muito obrigado pela reposta e pela atenção.... O erro ainda permanece... Teria como demonstrar como alterar a permissão de compartilhamento da pasta ?? Pois a alteração em permissões na aba de segurança para os usuários logados na máquina, eu consegui alterar, adicionar, remover. Mais as permissões para o compartilhamento não, apenas consigo compartilha a pasta e visualizar... usando de outros comandos.... Obrigado, no aguardo!!
nunopicado Posted March 14, 2014 at 08:36 PM Report #548649 Posted March 14, 2014 at 08:36 PM Eu nunca usei isto, não te sei dizer pormenores. O ApocSantos é que talvez saiba. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now