WInRar pelo Delphi
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;
Alguem tem alguma ideia se o problema é nas aspas ou algo assim?
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
Curtidas 0
Melhor post
Renato Rubinho
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);
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);
GOSTEI 1
Mais Respostas
Renato Rubinho
17/11/2014
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.
Abraççç,
Renato
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
GOSTEI 0
Vtrx
17/11/2014
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...
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...
GOSTEI 0
Renato Rubinho
17/11/2014
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 ?
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 ?
GOSTEI 0
Vtrx
17/11/2014
Ficou do mesmo jeito,aparece uma janela indicando que o arquivo não foi encontrado.
GOSTEI 0
Vtrx
17/11/2014
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?
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.
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.
GOSTEI 0
Vtrx
17/11/2014
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.
Muito obrigado
rrubinho.
GOSTEI 0