GARANTIR DESCONTO

Fórum WInRar pelo Delphi #501521

17/11/2014

0

Tenho um aplicatico que descompacta um arquivo .zip pelo Delphi(7),mas o comando que achei só esta funcionando no Windows 7,no XP não.
Usando o XP o Winrar avisa que não encontrou o arquivo,mas o código é o mesmo e a compilação também,mesmo compilando no XP não funciona.
Segue o comando,que usa ShellApi;

ShellExecute(0,nil,'Winrar.exe', Pchar ('e -ibck '+ExtractFilePath(Application.Exename)+'/resultados/D_quina.zip'+' '+ExtractFilePath(Application.Exename)+'/resultados/'),nil,sw_show);


Alguem tem alguma ideia se o problema é nas aspas ou algo assim?
Vtrx

Vtrx

Responder

Post mais votado

19/11/2014

Vi outro problema que pode ser:

Primeiro:
Passe os caminhos com barra invertida e não barra normal (isso eu acho que o winrar interpreta, maaaas).
Ao invés de '/resultados/D_quina.zip'
Passe '\resultados\D_quina.zip'

Segundo:
O problema pode ser o caminho que está passando no quarto parâmetro do ShellExecute, que são os parâmetros para o WinRar.
Se tiver espaço no caminho ExtractFilePath(Application.Exename) o winrar não vai conseguir interpretar como um parâmetro único.

Exemplo:
- Se o caminho do seu exe for: c:\teste de winrar\projeto.exe
O winrar vai ser chamado assim: winrar e -ibck c:\teste de winrar\resultados\D_quina.zip c:\teste de winrar\resultados\
- No arquivo a ser extraído e caminho, deve passar com aspas para suprir o "problema" dos espaços e o winrar interpretar como parâmetros únicos, pois o delimitados de parâmetros é o espaço
Ficando assim: winrar e -ibck "c:\teste de winrar\resultados\D_quina.zip" "c:\teste de winrar\resultados\"

No seu projeto fica assim:

ShellExecute(
0,
nil,
'Winrar.exe',
Pchar('e -ibck "'+ExtractFilePath(Application.Exename)+'/resultados/D_quina.zip'+'" "'+ExtractFilePath(Application.Exename)+'/resultados/' + '"'),
Pchar('"C:\Program Files (x86)\WinRAR\"'), // caminho do executável
sw_show);

Renato Rubinho

Renato Rubinho
Responder

Gostei + 1

Mais Posts

18/11/2014

Renato Rubinho

Buenos,

Tenta por o caminho do executável do winrar (se o winrar está retornando informação, não deve ser isso, mas quem sabe... rsrs)
Nos parâmetros, passa um espaço antes e um espaço depois. Já tive problemas por causa disso com ShellExecute.

ShellExecute(
0, 
nil, 
'Winrar.exe', 
Pchar('<ESPAÇO>e -ibck '+ExtractFilePath(Application.Exename)+'/resultados/D_quina.zip'+' '+ExtractFilePath(Application.Exename)+'/resultados/<ESPAÇO>'), 
Pchar('C:\Program Files (x86)\WinRAR\'),  // caminho do executável
sw_show);


Abraççç,
Renato
Responder

Gostei + 0

18/11/2014

Vtrx

rrubinho,achei o problema mas não a solução LOL.
Como citei,no Windows 7 este trecho de código funciona normal mas no XP não,e descobri que é o tamanho do caminho do executável.
Se eu arrastar o executável para C:\,por exemplo,funciona mas eu fiz os teste no Desktop(C:\Documents and Settings\vtr\Desktop\Megax2\resultados) e aí da erro.
Me ajuda a achar uma solução...
Responder

Gostei + 0

19/11/2014

Renato Rubinho

Acho que o problema não é exatamente o tamanho do caminho, mas sim o fato do "C:\Documents and Settings\vtr\Desktop\Megax2\resultados" não fazer parte do path do windows e o "c:\" deve fazer.
Se for isso, minha sugestão inicial deveria funcionar, pois no quinto parâmetro do ShellExecute, passando o caminho do WinRar, ele irá processar o executável esteja onde estiver. Você testou isso ?
Responder

Gostei + 0

19/11/2014

Vtrx

Ficou do mesmo jeito,aparece uma janela indicando que o arquivo não foi encontrado.
Responder

Gostei + 0

19/11/2014

Vtrx

Muito Bom!
Desse jeito que passou funcionou,só falta eu dar boot no Win7 para ver se funciona tambem.
Apenas eliminei a parte que indica o caminho do winrar,pois assim acho que mesmo que não esteja no diretório padrão,vai rodar,o que você acha disto?
ShellExecute(
0,
nil,
'Winrar.exe',
Pchar('e -ibck "'+ExtractFilePath(Application.Exename)+'/resultados/D_quina.zip'+'" "'+ExtractFilePath(Application.Exename)+'/resultados/' + '"'),nil,sw_show);


Será que você pode me ajudar em mais uma coisa?
Não sei como montar o comando para o winrar,no código acima,não mostrar a mensagem que pergunta se deseja substituir o arquivo tal pelo mais novo,assim eu poderia garantir que sempre teria o ultimo download baixado do arquivo.
Responder

Gostei + 0

19/11/2014

Vtrx

Antes que perca tempo,dei boot no Win7 e funcionou perfeitamente,e procurando no manual do Winrar,descobri que é só acrecentar -y que ele omite as perguntas se deseja subistituir o arquivo existente (e -ibck -y)
Muito obrigado
rrubinho.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar