Winexec com problema

14/03/2006

0

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


Edilcimar

Edilcimar

Responder

Posts

15/03/2006

Edilcimar

Ok, grato, vou testar os 2 processos passados, pelo PaullSoftware e Zanela, para ver se funcionam no cliente, mas a dúvida continua!


Responder

15/03/2006

Aroldo Zanela

Colega,

Encontrei outra funçao aqui na JCL (Jedi), mais especificamente na unit [b:35d48a7d7e]JclMiscel[/b:35d48a7d7e].

function WinExec32(const Cmd: string; const CmdShow: Integer): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(TStartupInfo), #0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := CmdShow;
  Result := CreateProcess(nil, PChar(Cmd), nil, nil, False,
    NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
  if Result then
  begin
    WaitForInputIdle(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
  end;
end;



Responder

16/03/2006

Martins

Sei q várias soluções já foram postadas e vão ser testadas por isso gostaria de sugerir o uso da variavel [b:b131012f95]CmdLine[/b:b131012f95].

encontrei esse exemplo e não tive tempo de testar, mas vc poderia dar uma olhada.

function ExecAndWait(const FileName, Params: string;
  const WindowState: Word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Coloca o nome do arquivo entre aspas. Isto é necessário devido
    aos espaços contidos em nomes longos }
  CmdLine := ´"´ + Filename + ´"´ + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do  begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
    PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);

  { Aguarda até ser finalizado }
  if Result then begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Libera os Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;


Usa-se assim.

ExecAndWait(´c:\windows\notepad.exe´, ´´, SW_SHOW);


Boa sorte


Responder

16/03/2006

Edilcimar

Vou testar todas no final de semana, mas até agora não achei uma resposta plausível par o erro em si, afinal de contas o mesmo não se justifica (exceto o maior problema de todos chamado bill gates)


Responder

17/03/2006

Ipc$

Provavelmente vc deve ter um arquivo chamado [b:1bb13f6f6a]Program.exe[/b:1bb13f6f6a] nessa máquina que não funciona.
Se tiver, o Winexec(Pchar(´C:\Program Files´..., executará Program.exe pq ele já encontrou o que executar. Os espaços as vezes pode complicar.


Responder

17/03/2006

Ipc$

Desculpe, não prestei atenção na sua chamada; ao invés de C:\Program Files, vc faz C:\Arquivo de ...
Veja se vc tem um [b:8bfa699072]Arquivo.exe[/b:8bfa699072], ou .scr, .bat etc . . .


Responder

20/03/2006

Edilcimar

Martins, Zanela e PaullSoftware, infelizmente devido ao desenvolvimento urgente de outro programa não deu tempo de testar, mas as hipóteses e a promessa de teste não foram descartadas


Responder

21/03/2006

Paullsoftware

:arrow: blz não esquenta com isso :!:


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar