Új hozzászólás Aktív témák

  • Fire/SOUL/CD

    félisten

    Hali!

    A kódrészletek Delphi-ben írodtak, de maga a probléma programozási nyelvtől független, szóval bármely topik jó lett volna, erre esett a választásom.
    Saját WinPE-t hegesztek, ahol egy amolyan Shell-t írok (sima VCL app), aminek az az egyszerű feladata, hogy adott programokat indítson el/futtasson 1 példányban és várja meg amíg bezárják/kilépnek belőle. Kézenfekvő megoldás a WaitForSingleObject, ami teszi is a dolgát, viszont egy furcsa "mellékhatás" jelentkezett, amikor a futtatott app ablakot mozgatom egérrel és leteszem kicsibe (minimize).
    Ez lenne a normális, de ehelyett a parent Form-on ott marad az app felülete...

    Néhány támpont:
    # csak WinPE ISO-ról boot-olva (nem virtuális gépen) jön elő, Windows alatt nem
    # CreateProcess és ShellExecuteEx esetén is
    # sima (nem felügyelt) futtatásnál WinPE ISO boot és Windows alatt sincs gond (csak ekkor ugye nem tudom, mikor lép ki a progi)

    sima futtatás
    ShellExecute(Handle, 'open','X:\Program Files\DiskGenius.exe', nil, nil, SW_SHOWNORMAL) ;

    CreateProcess
    ZeroMemory(@MyStartupInfo, SizeOf(MyStartupInfo));
    ZeroMemory(@MyProcessInfo, SizeOf(TProcessInformation));
    MyStartupInfo.cb := SizeOf(TStartupInfo);
    MyStartupInfo.wShowWindow := SW_SHOWNORMAL;

    CreateOK := CreateProcess(PChar('X:\Program Files\DiskGenius.exe'),
    nil,
    nil,
    nil,
    False,
    CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,
    nil,
    nil,
    MyStartupInfo,
    MyProcessInfo
    );
    if CreateOK then

    begin
    WaitForSingleObject(MyProcessInfo.hProcess,INFINITE);
    ShowMessage('Kilépett a program');
    end
    else ShowMessage('Gebasz van!');
    CloseHandle(MyProcessInfo.hProcess);
    CloseHandle(MyProcessInfo.hThread);

    ShellExecuteEx
    ZeroMemory(@MyExecuteInfo, SizeOf(MyExecuteInfo));
    with MyExecuteInfo do
    begin
    cbSize := SizeOf(MyExecuteInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS;
    lpFile := PChar('X:\Program Files\DiskGenius.exe');
    lpVerb:='Open';
    nShow := SW_SHOWNORMAL;
    end;

    CreateOK:=ShellExecuteEx(@MyExecuteInfo);
    if CreateOK then begin
    WaitForSingleObject(MyExecuteInfo.hProcess, INFINITE);
    ShowMessage('Kilépett a program');
    end
    else ShowMessage('Gebasz van!');

    Szóval: Ötlet? (meg tudom oldani másképp a dolgot, azon ne agyaljatok, csak érdekelne, hogy mi ennek a matyózásnak az oka...)

Új hozzászólás Aktív témák

Hirdetés