Winexec com problema
14/03/2006
0
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
Posts
15/03/2006
Edilcimar
15/03/2006
Aroldo Zanela
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;
16/03/2006
Martins
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
16/03/2006
Edilcimar
17/03/2006
Ipc$
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.
17/03/2006
Ipc$
Veja se vc tem um [b:8bfa699072]Arquivo.exe[/b:8bfa699072], ou .scr, .bat etc . . .
20/03/2006
Edilcimar
Clique aqui para fazer login e interagir na Comunidade :)