Доброго времени суток уважаемые коллеги.
Возникла насущная проблемка. В интерактивный сервис решил вставить кусок кода, который будет открывать новый процесс в новом десктопе. Решал эту проблему так:
hDesktop=CreateDesktop("ND", NULL, NULL, DF_ALLOWOTHERACCOUNTHOOK, MAXIMUM_ALLOWED, NULL);
memset(&StartInfo, sizeof(StartInfo), 0);
StartInfo.cb = sizeof(StartInfo);
StartInfo.dwFlags = STARTF_USESHOWWINDOW;
StartInfo.wShowWindow = SW_SHOW;
StartInfo.lpDesktop = "ND";
PR = CreateProcess("c:\a.exe",NULL,NULL,NULL,false,
CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL,
&StartInfo, &ProcInfo);
SwitchDesktop(hDesktop);
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
SwitchDesktop(GetThreadDesktop(GetCurrentThreadId()));
CloseDesktop(hDesktop);
проблема не решилась. Точнее решилась, но не так как надо. При запуске НЕ из сервиса — все замечательно работает. При запуске из сервиса — создается десктоп, на него свитчимся и прилоложение, которое я запускаю вылетает с "The application failed to initialize properly (0xc0000142)... и т.д.". Прав, по идее, хватать должно, тем более я не создаю Winstation.
Поиск в нете мало что дал, вручнуя менять размер выделяемой для desktop heap в реестре очень не хочется.
Знаю, что тут есть люди которые с этим сталкивались, только немного в других ситуациях. Поделитесь плз. опытом.
PS. Насколько в юниксе все проще