Página 1 de 1

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 02 Mar 2016 00:06
por rochinha
Amiguinhos,

Coisa louca aconteceu comigo estes dias. Nunca tive este problema no XP mas no Windows 7 em diante tá acontecendo o seguinte:

Tenho duas maquinas A(cliente) e B(servidora)

-Em B(servidora) compartilhei a pasta sistema e dei todos as permissões possíveis.
-Em A(cliente) encontrei a maquina tanto via \\192.168.1.100\c quanto via \\SuperServer\c e fiz o mapeamento para as letras S: e Y: respectivamente.
-Em meu código coloquei:

Código: Selecionar todos

   Set Default to &(cPathDados)
   if file( "controle.dbf" )
       ?"encontrei com set default",curdir(),curdrive()
   else	   
       ?"nao encontrei com set default",curdir(),curdrive()
   endif
   
   lCHDIR( cPathDados )
   if file( "controle.dbf" )
       ?"encontrei com lCHDir",curdir(),curdrive()
   else	   
       ?"nao encontrei com lCHDir",curdir(),curdrive()
   endif
Me é retornado:

Código: Selecionar todos

       nao encontrei com set default
       \192.168.1.100\c\sistema
       \

Código: Selecionar todos

       nao encontrei com lCHDir
       \192.168.1.100\c\sistema
       \
Em nenhum dos casos me retornou a letra S: ou Y: e os comandos de abertura estão falhando acusando DOS ERROR 3.

Se alguém tiver uma idéia que não seja mudar de Harbour, ka, ka, ka, agradeço.

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 02 Mar 2016 07:18
por JoséQuintas
Criou o atalho pela pasta normal, e não pela pasta mapeada?

e/ou... chdir() só altera o diretório, e não a letra. faltou chdrive()

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 02 Mar 2016 08:30
por asimoes
Rochinha,

Pode usar também:
HB_CWD() que no harbour substitui o DIRCHANGE()

Está no changelog

added support for setting new working directory (and drive)
by HB_CWD( <cNewWD> )

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 03 Mar 2016 01:54
por rochinha
Amiguinhos,

Estou de volta para dar o respaldo e minha solução.

Rodei a internet inteira por 2 dias, caçando códigos, scripts em vb e java, php, pog e olhem onde fui parar, mundo pequeno.

Bom o fato é que encontrei o que eu queria, que seria uma função que me retornasse a letra mapeada de um endereço UNC qualquer. Exemplo: Que letra foi mapeada para \\servidor\c\sistema?

Pois bem, em minhas andanças encontrei:

Código: Selecionar todos

function GetDrvMapLetter( cPathName )
   LOCAL cDrive, i, cServer
   FOR i = 1 to 26
       cDrive  := chr(64+i) + ":"
       cServer := NetRmtName( cDrive )
       IF alltrim( cPathName ) == alltrim( cServer )
          return cDrive
       ENDIF
   NEXT
   return ""
Problema resolvido. Só que Não. Apesar de ter a biblioteca ct.lib anexada na compilação a função NetRmtName() não retornou nem um AI!.

Bom precisava resolver meu problema de rede que nem era meu e sim do Windows, então verificando alguns vbscripts montei um que me atendeu:

Código: Selecionar todos

function GetDrvMapLetter( strLocalDrive ) // UNC path
	local aGetDrvMapLetter := {}
    local objNetwork := TOLEAuto():New( "WScript.Network" )
    local objDrives   := objNetwork:EnumNetworkDrives()
    local i := 0
    If objDrives:Count > 0
        do while i < objDrives:Count
             if !empty( strLocalDrive )
                if upper( objDrives:Item(i+1) ) = upper( strLocalDrive )
                   aGetDrvMapLetter := { objDrives:Item(i), objDrives:Item(i+1) }
				   exit
                endIf
             else
                aadd( aGetDrvMapLetter, { objDrives:Item(i), objDrives:Item(i+1) } )
             endif
             i=i+2
        enddo	
    EndIf 
    return aGetDrvMapLetter
Seu uso é simples:

Código: Selecionar todos

? len( GetDrvMapLetter( "\\lenovo-pc\_drive_e" ) )

? len( GetDrvMapLetter() )

? len( GetDrvMapLetter( "\\lenovo-pc\g" ) )
Lógico que esta é a versão 0.0000001 e pode melhorar, mas me quebrou o galho de saber a letra do mapeamento.

Quem tiver algo semelhante em Harbour pode indicar e acescentar ao tópico. Se estiver em C também serve.

Fica a Dica.

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 03 Mar 2016 03:07
por alxsts
Olá!

Não acha interessante sugerir a criação desta funcionalidade ao grupo do Harbour e Viktor?

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 03 Mar 2016 11:07
por ANDRIL
Já tinha tentando através do NET USE saber os mapeamentos ativos no PC? Lendo o resultado dele daria para 'bolar' o retorno desejado, ou não?
Até+

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 03 Mar 2016 11:31
por rochinha
Amiguinhos,
Olá!
Não acha interessante sugerir a criação desta funcionalidade ao grupo do Harbour e Viktor?
Acho até que já exista. A minha fonte de pesquisa geralmente era baseada no site harbour.vouch.info que foi hackeado.
Já tinha tentando através do NET USE saber os mapeamentos ativos no PC? Lendo o resultado dele daria para 'bolar' o retorno desejado, ou não?
Até+
Nem me passou pela cabeça, pois a cada minuto era um telefonema de cliente dizendo, não tá entrando...

O problema de mapeamentos está relacionado as redes sob Windows 7 em diante, por causa da segurança a nível de usuário. Mapeamentos criados sob um usuário não são visíveis a outros e quando visíveis as restrições não permitem o bom executar dos acessos a .DBF que não trabalham bem sob endereços UNC. Tipo \\maquina\etc.

O Windows me pregou uma peça. Teve a paxorra de me dizer que eu estava digitando o nome de um executável errado ou inexistentes sendo que eu estava dentro da pasta do mesmo.

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 21 Mar 2016 21:25
por rbonotto
Tive um problema parecido, rosolvi de uma forma bem simples e um pouco no susto.
No pc cliente além do mapeamento faço a conexão da unidade de rede atribuindo sempre a letra S

Quem sabe...

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 21 Mar 2016 21:59
por rochinha
Amiguinhos,

Resolvi o problema com as funções que postei mas também de outra forma.

Ativei o Administrador escondido do Windows e pronto.

net user administrador active:yes

Deixei o usuário administrador ativo e os problemas com mapeamentos, etc, sumiram e o cliente parou de me pentelhar.

Lógico que isto libera a segurança, mas parte do meu serviço de suporte é a manutenção preventiva semanal.

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 23 Mar 2016 10:43
por HASA
:?
Cuidado com esse comando
net user administrador active:yes
em máquinas com Win/xp, se ela foi formatada sem criar a senha do administrador a mer... ta feita, não passaras da tela de login ok.
- CUIDADO....
:)Pos
HASA

Curdir() e CurDrive() na rede não retorna letra correta?

Enviado: 23 Mar 2016 12:49
por rochinha
Amiguinhos,
Cuidado com esse comando
ka, ka, ka.

Sei disto amiguinho, mas o cliente tava me enxendo o saco.