Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Интересный CreateProcess

293
25 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
Проблема такая
Из сервиса запускаеться EXE с использованием функции CreateProcess - но запускаеться скрытым. Тот же самый код из обычного приложения запускает нормально все. Какких флагов не хватает?

[COLOR=darkblue]
STARTUPINFO start = {sizeof(TStartupInfo)};
PROCESS_INFORMATION procInfo;
LPCTSTR s;
start.cb = sizeof(start);
start.dwFlags = STARTF_USESHOWWINDOW;
start.wShowWindow = SW_SHOW;

CreateProcess(NULL, patch.c_str(), NULL,NULL,false,
NORMAL_PRIORITY_CLASS, NULL,NULL, &start,&procInfo);
[/COLOR]
3
25 марта 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by SEDEGOFF
Проблема такая
Из сервиса запускаеться EXE с использованием функции CreateProcess - но запускаеться скрытым. Тот же самый код из обычного приложения запускает нормально все. Какких флагов не хватает?

[COLOR=darkblue]
STARTUPINFO start = {sizeof(TStartupInfo)};
PROCESS_INFORMATION procInfo;
LPCTSTR s;
start.cb = sizeof(start);
start.dwFlags = STARTF_USESHOWWINDOW;
start.wShowWindow = SW_SHOW;

CreateProcess(NULL, patch.c_str(), NULL,NULL,false,
NORMAL_PRIORITY_CLASS, NULL,NULL, &start,&procInfo);
[/COLOR]



Я бы отчистил структуру STARTUPINFO перед заполнением:

 
Код:
STARTUPINFO start;
ZeroMemory(&start, sizeof start);
start.cb = sizeof start;
start.dwFlags = STARTF_USESHOWWINDOW;
start.wShowWindow = SW_SHOW;

Кстати, для чего:
STARTUPINFO start = {sizeof(TStartupInfo)}; ?

Возможно, надо добавить флаг CREATE_NEW_PROCESS_GROUP в CreateProcess
293
25 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
Цитата:
Originally posted by Green


Я бы отчистил структуру STARTUPINFO перед заполнением:
 
Код:
STARTUPINFO start;
ZeroMemory(&start, sizeof start);
start.cb = sizeof start;
start.dwFlags = STARTF_USESHOWWINDOW;
start.wShowWindow = SW_SHOW;

Кстати, для чего:
STARTUPINFO start = {sizeof(TStartupInfo)}; ?

Возможно, надо добавить флаг CREATE_NEW_PROCESS_GROUP в CreateProcess



не работает.
По поводу
STARTUPINFO start = {sizeof(TStartupInfo)}; ?
Это я откудато скопировал просто

А вот с таким кодом тоже не работает
[COLOR=darkblue]
STARTUPINFO start;
ZeroMemory(&start, sizeof(STARTUPINFO));
PROCESS_INFORMATION procInfo;
LPCTSTR s;
start.cb = sizeof(STARTUPINFO);
start.dwFlags = STARTF_USESHOWWINDOW;
start.wShowWindow = SW_SHOW;

CreateProcess(NULL, patch.c_str(), NULL,NULL,false,
CREATE_NEW_PROCESS_GROUP, NULL,NULL, &start,&procInfo);
[/COLOR]

ДА вот еще парадокс
Есть у меня еще один сервис - так вот от туда все нормально работает

293
25 марта 2004 года
SEDEGOFF
586 / / 06.10.2002

Ну в общем поборол я его (в смысле сервис)
Расказываю - мож кому пригодиться.


Если при проектировании сервиса в его свойсвах
не указать ServiceStartName=".\LocalSystem", то
после установки сервису будет запрещено взаимодействие с рабочим столом - отсюда и идет скрытый запус программ, так как непонятно где это программа была запущена - вот так.

Если это все же произошло - то нужно в свойствах сервиса поставить эту чертову галочку.

3
25 марта 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by SEDEGOFF

Ну в общем поборол я его (в смысле сервис)
Расказываю - мож кому пригодиться.


Если при проектировании сервиса в его свойсвах
не указать ServiceStartName=".\LocalSystem", то
после установки сервису будет запрещено взаимодействие с рабочим столом - отсюда и идет скрытый запус программ, так как непонятно где это программа была запущена - вот так.

Если это все же произошло - то нужно в свойствах сервиса поставить эту чертову галочку.



А как на счет параметра CreateProcess lpDesktop ?

293
26 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
В смысле передать хендел десктопа?
3
26 марта 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by SEDEGOFF
В смысле передать хендел десктопа?



В структуре STARTUPINFO есть поле lpDesktop.
В нем передается имя десктопа, а не хендл.
Более конкретно здесь:
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q171/8/90.asp&NoWebContent=1
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q165/1/94.asp&NoWebContent=1

36K
24 января 2008 года
Fyodor
1 / / 23.01.2008
Цитата: SEDEGOFF

Если при проектировании сервиса в его свойсвах
не указать ServiceStartName=".\LocalSystem"



Подскажите пожалуйста, где именно это надо прописывать (а точнее при заполнении какой структуры или вызове какой функции)?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог