Re[4]: Не работает под Windows ME
От: retalik www.airbandits.com/
Дата: 23.11.01 05:33
Оценка:
Здравствуйте Андрей, Вы писали:

А>Здравствуйте Vodka, Вы писали:


V>>Если lpCmdLine — это программа, то действительно лучше CreateProcess, а если это документ (типа some.doc), то CreateProcess здесь не поможет.


А>Он про программу писал, а не про документ.


В принципе, если самому лазить по реестру, можно и для документа обойтись CreateProcess, но зачем?
Потом, если хэндл, который вернула ShellExecuteEx с флагом SEE_MASK_NOCLOSEPROCESS, нельзя использовать для ожидания завершения процесса, то где гарантия, что можно использовать тот хендл, что вернет CreateProcess?

И вообще, тут что-то не то.
Я сделал маленькую консольную программу:
// cl /MD shell.cpp user32.lib shell32.lib

#include <windows.h>

const char *lpCmdLine="calc.exe";

int main()
{
    SHELLEXECUTEINFO info; 

    info.cbSize = sizeof(SHELLEXECUTEINFO); 
    info.hwnd = 0; 
    info.lpVerb = "open"; 
    info.lpFile = lpCmdLine; 
    info.lpParameters = NULL; 
    info.lpDirectory = NULL; 
    info.fMask = SEE_MASK_NOCLOSEPROCESS; 
    if(ShellExecuteEx(&info)) 
    { 
        HANDLE hProc = info.hProcess; 
        WaitForSingleObject(hProc, INFINITE); 
        MessageBox(0, "Done", "shex succeeded", MB_OK);
    } 
    else MessageBox(0, "oops", "shex failed", MB_OK);
}


Так вот, работает и на 98, и на ME! (чтобы найти машину с этим глюкалом, пришлось на этаж подняться )

Может, надо обнулять структуру SHELLEXECUTEINFO для гарантии?
Успехов,
Виталий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.