Brunog3 Aprendiz
Registrado: Domingo, 16 de Dezembro de 2007 Mensagens: 206
|
Enviada: Ter Out 19, 2010 4:38 pm Assunto: ServiceApplication + ShellExecute |
|
|
Boa tarde pessoal.
Estive tentado executar uma aplicação de dentro de um serviço, porém ela não abre corretamente e não consegui identificar o que acontece.
O formulário da aplicação não é mostrado e nem aparece ela na barra de tarefas.
Esse teste eu fiz com uma aplicação sem nada, somente um formulário mesmo, e com a calculadora do windows.
Chamando por outro tipo de aplicação, abre normalmente.
Alguém tem alguma idéia...
Vou postar as rotinas que tentei utilizar:
Código: | procedure exec(sFile: string);
var
SEInfo : TShellExecuteInfo;
ExecuteFile : string;
begin
ExecuteFile := sFile;
try
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := 0;
lpFile := PChar(ExecuteFile);
lpParameters := nil;
lpDirectory := pchar(ExtractFilePath(sfile));
nShow := SW_SHOWNORMAL;
end;
ShellExecuteEx(@SEInfo);
except
on e: exception do
ShowMessage('Erro ao abrir arquivo. ' + e.Message);
end;
end;
function CreateProcessSimple(cmd: string): boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
SUInfo.cb := SizeOf(SUInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE;
Result := CreateProcess(nil,
PChar(cmd),
nil,
nil,
false,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
SUInfo,
ProcInfo);
if (Result) then
begin
// WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
ShellExecute(0, 'open', pChar('c:\windows\calc.exe'), nil, nil, SW_SHOW) |
|
|