Winexec com problema - Fórum DevMedia
Winexec com problema
Tenho o seguinte comando para zipar arquivos
WinExec(PChar(´C:\Arquivo de Programas\WinZip\WinZip32, etc
no meu computador funciona, no do cliente funcionava e de uma hora para outra parou de funcionar (não sei o que ele fez), simplesmente não reconhece o ´nome grande´, se trocar para c:\arquiv~!\winzip\winzip32 ele volta a funcionar, alguém sabe qual é o problema? O Windows é o XP
olá Eldicimar, tente substituir o comando WinExec() por essa procedure que fiz depois de ter problemas semelhantes ao seu...
procedure ExecProg(Nome, Parametros: String; Janela:Integer);
Comando: Array[0..1024&93; of Char;
Parms: Array&91;0..1024&93; of Char;
Nome := ´"´ + Nome + ´"´;//Coloca o endereço entre aspas, deve ser usado em path´s muito longas...
ShellExecute (0, Nil, Comando, Parms, Nil, Janela);
Aproveitando a dúvida do nosso colega, vc poderia colocar um exemplo de como se utiliza esta procedure para o winzip ?
Ok, PaullSoftware, mas vc sabe o porquê deste problema?
e acabei de descobrir que em um dos computadores mesmo com o nome ´curto´, c:\arquiv~1\winzip\winzip32 não funciona!
Normalmente o Windows se encarrega de substituir espaços em branco por ~ tipo assim:
para acessar a pasta C:\Paulo Ricardo\Arquivos muitas vezes ele faz assim: C:\Paul~1\arquivos e na época do dos para se acessar paths que continham espaços era preciso colocá-lo entre aspas assim:
´C:\Paulo Ricardo\Arquivos´ entedeu?
1) no DOS eu sei que ele transforma o nome grande em nome pequeno, com 8 caracteres
2) tem computador que está aceitando nome grande, tem computador que está aceitando nome pequeno e tem computador que não está aceitando nem o nome grande nem o nome pequeno
3) o meu comando do winexec() está entre aspas
Eu sempre achei que o xp não trocasse o nome grande pelo pequeno, e pelo tipo de erro que está dando não creio que seja este relamente o problema, mas sim um outro que não descobri
Interessante isso [b:5deb70c036]Edilcimar[/b:5deb70c036], vc já tentou pelo prompt? Tente colocar no prompt assim:
[b:5deb70c036]´C:\Arquivo de Programas\WinZip\WinZip32... etc´[/b:5deb70c036]
coloque entre aspas.
se eu colocar no ´executar´ do windows, na máquina onde o winexec não funciona dentro do programa, o comando c:\arquivos de programas\winzip\winzip32 não funciona, porém se colocar entre aspas funciona, mas dentro do meu programa ele está com aspas, e na máquina onde o nem longo nem nome curto não funcionam, o executar do windows funciona normalmente entre aspas
Muito estrranho isso aí viu [b:5647079e2d]Edilcimar[/b:5647079e2d], poderia ser vírus ou alguma config. do Windows?
Pq nunca vi isso.
Não sei se tem virus ou se é uma configuração do windows, mas talvez seja configuração do windows, pois todos os computadores do cliente estão em rede e em cada um acontece uma das coisas, e no meu computador está funcionando perfeitamente
Então pode ser a config. mas é estranho, não caberia encontrar outra solução para esse problema?
Fiz algumas pesquisas para ver se alguém na comunidade internacional já tinha passado pelo problema e infelizmente, não encontrei nada. Esta funcionalidade da API (Kernel32) já não é recomendada há algum tempo e ShellExecute deve ser usada em sua substituição.
Mesmo assim, encontrei uma função escrita por Pat Ritchey (TeamB) e aprimorada por Xavier Pacheco (TeamB) para executar um processo e aguardar sua finalização. Como não se trata de uma API, podemos efetuar qualquer correção que seja necessária.