Не работает под Windows ME
От: Alexs  
Дата: 22.11.01 11:43
Оценка:
Привет. Сделал запуск другой программы с ожиданием ее окончания. Под Windows-2000 все работает, а под Windows ME не ждет окончания запущенной задачи. Прикладываю свой код, подскажите в чем дело.
Заранее спасибо.

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);
}
Re: Не работает под Windows ME
От: Андрей Россия  
Дата: 22.11.01 11:55
Оценка:
Здравствуйте Alexs, Вы писали:

A>Привет. Сделал запуск другой программы с ожиданием ее окончания. Под Windows-2000 все работает, а под Windows ME не ждет окончания запущенной задачи. Прикладываю свой код, подскажите в чем дело.

A>Заранее спасибо.

Лучше используй CreateProcess
Re[2]: Не работает под Windows ME
От: Vodka  
Дата: 22.11.01 15:06
Оценка:
Здравствуйте Андрей, Вы писали:

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


A>>Привет. Сделал запуск другой программы с ожиданием ее окончания. Под Windows-2000 все работает, а под Windows ME не ждет окончания запущенной задачи. Прикладываю свой код, подскажите в чем дело.

A>>Заранее спасибо.

А>Лучше используй CreateProcess


Если lpCmdLine — это программа, то действительно лучше CreateProcess, а если это документ (типа some.doc), то CreateProcess здесь не поможет.
Re[3]: Не работает под Windows ME
От: Андрей Россия  
Дата: 23.11.01 04:04
Оценка:
Здравствуйте Vodka, Вы писали:

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


Он про программу писал, а не про документ.
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 для гарантии?
Успехов,
Виталий.
Re[5]: Не работает под Windows ME
От: Андрей Россия  
Дата: 23.11.01 06:14
Оценка:
Здравствуйте retalik, Вы писали:

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


R>Может, надо обнулять структуру SHELLEXECUTEINFO для гарантии?


Все может быть, может быть надо еще SEE_MASK_FLAG_DDEWAIT использовать. Вообще, часто мне программирование под Windows напоминает шаманство.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.