Добрый день. Имеется сервис запущенный от имени пользователя входящего в группу пользователей. Нужно чтобы этот сервис запускал определенные консольные программы от имени администратора. Имеется код, с помощью которого производится запуск приложения: ZeroMemory (@si, sizeof (si)); si.cb := sizeof (si); si.lpDesktop := PChar ('winsta0\default'); CreateProcessWithLogonw('User',nil,'123',LOGON_WITH_PROFILE,nil, PWideChar(WideString(CmdLine)),CREATE_NEW_CONSOLE,nil,nil,si,pi); Проблема заключается в том, что оконные приложения запускаются нормально, а вот консольные не запускаются. Проверял на 2-х операционках. Win7:Все как описано выше. Win2k3:Консольное приложение в списке процессов появляется, но видимо не до конца инициализируется. Висит в списке задач. Может кто подскажет чего-нибудь. Буду очень признателен.
Пробовал выше написанное: Код (Text): ZeroMemory(@PI,SizeOf(PI)); ZeroMemory(@SI,SizeOf(SI)); SI.cb:=SizeOf(SI); SI.lpDesktop:=PChar('WinSta0'+'\'+'default'); SI.dwFlags := STARTF_USESHOWWINDOW; SI.wShowWindow := SW_SHOW; if not LogonUser(PChar(Username),nil,PChar(Password),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,h) then Log('Could not log user in'); if not CreateEnvironmentBlock(p,h,True) then Log('Could not access user environment'); if WorkingDirectory='' then wCurrentDirectory:=GetCurrentDir else wCurrentDirectory:=WorkingDirectory; if not CreateProcessWithLogon(PWideChar(wUser),PWideChar(wDomain),PWideChar(wPassword),LOGON_WITH_PROFILE,nil,PWideChar(wCommandLine),CREATE_UNICODE_ENVIRONMENT,p,PWideChar(wCurrentDirectory),SI,PI) then log('Could not create process'); CloseHandle(PI.hProcess); CloseHandle(PI.hThread); К сожалению результат тот же. Может что-то делаю не так. Много в инете рылся и на английских сайтах. Очень хочется довершить свою идею.
При dwCreationFlags = CREATE_NEW_CONSOLE, CREATE_UNICODE_ENVIRONMENT, CREATE_UNICODE_ENVIRONMENT or CREATE_NEW_CONSOLE. Результат один и тот же, т.е. его отсутствие. Самое что противное, ни каких ошибок и не понятно в какую сторону копать.