Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

Запуск стороннего exe   Найти похожие ветки 

 
VitalikS   (2006-08-23 09:32) [0]

О программе:
1) Собственно сама программа exe"шник
2) Служба Windows, которая контролирует запущенна ли программа

А вот вопрос:
Если запускаю exe то всё работает нормально, но как только программу запускает служба, то тут начинаются глюки.
В службе как уже только не запусказ exe всё никак не получается использовал: ShellExecute, winexec, CreateProcess, пока сейчас с последним мучаюсь, получается они все запускают приложение как потомок от службы (или я что-то недопонимаю), а нет ли такого способа что-бы программа была запущена как самостоятельное приложение т.е. что-бы функция запустила программу и всё, программа бы знала текущую директорию (это удалось решить использованием последней функции, но всё же есть сомнения) и что-бы SHBrowseForFolder работал (при запуске службой не видит рабочий стол и мои документы, в пути вместо папки user"а ставит LocalService).
Помогите пожалуйста разобраться.


 
ANB ©   (2006-08-23 10:14) [1]

А служба запущена, есно, не из под юзера, под которым залогинились :)
И под системом она и запускает твою прогу, от чего и прут глюки. Ищи как запустить процесс из под другого юзера.


 
Ketmar ©   (2006-08-23 11:23) [2]

CreateProcessAsUser(), например.


 
VitalikS   (2006-08-24 02:20) [3]


> CreateProcessAsUser(), например.
>

При использовании в параметре нужно указывать логин и пароль пользователя, а этого бы не хотелось.

Если указываю логин и пароль пользователя в самой службе (средствами windows), то служба программу запускает, но программа видна только в процессах, а в трее иконки нет, хотя должна быть (программа запускается, сворачивается и оставляет след в трее о своём наличии).


 
Ketmar ©   (2006-08-24 02:24) [4]

> [3] VitalikS   (24.08.06 02:20)
и вовсе не должна. кто сказал, что она запустится на том же рабочем столе, за каким юзер?


 
VitalikS   (2006-08-24 02:42) [5]


> и вовсе не должна. кто сказал, что она запустится на том
> же рабочем столе, за каким юзер?

а как ещё, если я запускаю программу под тем юзером под которым зашел в систему. да и процессах "имя пользователя" то под которым зашел.


 
VitalikS   (2006-08-24 04:38) [6]


> CreateProcessAsUser(), например.

Вписываю логин и пароль юзера, программ запускается от его имени и иконка в трее висит, но при отображении окна программы показывается только заголовок окна, без всяких надписей и кнопок просто полоска синяя и всё и так все окна.


 
Чапаев ©   (2006-08-24 08:30) [7]

> если я запускаю программу под тем юзером под которым зашел
> в систему

Кто сказал? Ты же сам чуть раньше говорил, что программу из службы запускаешь...


 
VitalikS   (2006-08-24 08:46) [8]


> Кто сказал? Ты же сам чуть раньше говорил, что программу
> из службы запускаешь...

Да из службы, но в службе можно прописать от какого юзера запускаться, вот если я в службе средствами windows прописываю юзера то служба и соответственно программа запускаеются от этого пользователя.

Тут ещё вот, что обнаружил, если сначала запустить службу от нужного юзера (как описал выше), а потом в свойствах службы вернуть галку "вход от системноу учетки", то SHBrowseForFolder будет нормально видет рабочий стол и документы.

Почему так, что предпринять? Я уже всё облазил ну нигде ничего толкового не могу найти, а надо, очень надо.


 
Чапаев ©   (2006-08-24 09:11) [9]

> Да из службы, но в службе можно прописать от какого юзера
> запускаться, вот если я в службе средствами windows прописываю
> юзера то служба и соответственно программа запускаеются
> от этого пользователя.

Бррр...


> Почему так, что предпринять?

Первым делом -- подумать. Зачем такие вот фокусы? Что за задача?


 
VitalikS   (2006-08-24 09:21) [10]

Задача такая:
Программа выбирает определенные данные с базы FB.
Всё бы хорошо, но на некоторых машинах (где сидят шибко шустрые операторы!!!) программа вылетает. Вот для этого и написана служба которая запускает приложение повторно через определенный интервал времени.
Вот собственно и вся задача.


 
Ketmar ©   (2006-08-24 10:05) [11]

> [10] VitalikS   (24.08.06 09:21)
ффух. а SetUnhandledExceptionFilter() не помогает?


 
Чапаев ©   (2006-08-24 11:02) [12]

> на некоторых машинах (где сидят шибко шустрые операторы!
> !!) программа вылетает.

Гм... "Когда у мадам падала выручка, она меняла девочек, а не кровати". Может, стоит глюки в исходной программе искать, а не устранять симптомы, да ещё так извратно?

А служба зачем в принципе? Не проще ли написать обычную прогу, которая по таймеру будет отслеживать что надо, и засунуть её в автозагрузку? Во всяком случае проблема запуска из-под другого пользователя самоликвидируется...


 
kami ©   (2006-08-24 13:53) [13]

Еще раз, почти дословная цитата.
Для XP :

Набережных С. ©   (12.03.05 16:14) [25]
function ExecuteOnSession(SessionID: DWORD; const AppName: string): THandle;
var
H: THandle;
SI: TStartupInfo;
PI: TProcessInformation;
begin
Result:=0;
if not WTSQueryUserToken(SessionID, H) then Exit;
try
  FillChar(SI, SizeOf(SI), 0);
  SI.cb:=SizeOf(SI);
  if CreateProcessAsUser(H, nil, "Notepad.exe", nil, nil, false,
                   CREATE_NEW_CONSOLE,  nil, nil, SI, PI) then
  begin
    CloseHandle(PI.hThread);
    Result:=PI.hProcess;
  end;

finally
  CloseHandle(H);
end;
end;

function ExecuteAsIU_XP(const AppName: string): THandle;
var
SessionID: DWORD;
begin
SessionID:=WTSGetActiveConsoleSessionId;
Result:=ExecuteOnSession(SessionID, AppName);
end;



 
VitalikS   (2006-08-25 00:58) [14]


> а SetUnhandledExceptionFilter() не помогает?

Не знаю что это такое поищу, посмотрю потом отвечу...

> Может, стоит глюки в исходной программе искать,

Синдром "корявых рук оператора" устранить в программе никак нельзя, тем более тот который присутствует у нас.
> А служба зачем в принципе? Не проще ли написать обычную
> прогу, которая по таймеру будет отслеживать что надо, и
> засунуть её в автозагрузку?

Прога и так помещена в автозагрузку и по таймеру отслеживает что её надо, но я же уже писал, что на некоторых машинах вылетает.......для этого и служба, чтобы свести отсутствие программы к минимуму.
kami, я попробую по результатам отпишусь


 
Ketmar ©   (2006-08-25 01:30) [15]

> [14] VitalikS   (25.08.06 00:58)
> Синдром "корявых рук оператора"...
устранять не надо. надо выпрямитель рук для программиста, который позволяет себе не обрабатывать исключения.


 
VitalikS   (2006-08-25 01:51) [16]


> устранять не надо. надо выпрямитель рук для программиста,
>  который позволяет себе не обрабатывать исключения.

Нельзя, программа должна работать весь день и не выдавать оператору никаких сообщений об ошибках.

> Еще раз, почти дословная цитата.
> Для XP :

Не работают эти функции. Во первых там переменные объявлены неверно (насколько я понял) их типы. Останавливается всё на:

> if not WTSQueryUserToken(SessionID, H) then Exit;

причём exit не выполняется.
Кстати функции объявлял так:

function TSQueryUserToken(SessionId:pDWord;phToken:pHandle):bool;stdcall;external "wtsapi32.dll";

function WTSGetActiveConsoleSessionId:pDWORD;stdcall;external "Kernel32.dll";

может что-то не правильно, но программа на это не ругается т.е. функции видит, но здесь видно что с типами переменны что-то непонятное


 
Ketmar ©   (2006-08-25 02:19) [17]

> [16] VitalikS   (25.08.06 01:51)
> Нельзя, программа должна работать весь день и не выдавать
> оператору никаких сообщений об ошибках

Вы-таки будете смеяться, но именно для обработки (и последующей возможной невыдачи) "сообщений об ошибках" программисты ловят исключения и проверяют всякие значения на допустимость.


 
Германн ©   (2006-08-25 03:01) [18]


> Ketmar ©   (25.08.06 02:19) [17]
>
> > [16] VitalikS   (25.08.06 01:51)
> > Нельзя, программа должна работать весь день и не выдавать
> > оператору никаких сообщений об ошибках
> Вы-таки будете смеяться, но именно для обработки (и последующей
> возможной невыдачи) "сообщений об ошибках" программисты
> ловят исключения и проверяют всякие значения на допустимость.
>
>

Не знаю, что "делают в таких случаях программисты", но если программа должна работать "круглосуточно", то без лога не обойтись!


 
Ketmar ©   (2006-08-25 03:10) [19]

> [18] Германн ©   (25.08.06 03:01)
а лог -- он вообще почти всегда полезен. %-)


 
VitalikS   (2006-08-25 06:15) [20]

Лог есть.
В логе все нормально, никаких ошибок небыло, но программа куда то исчезла, операторы говорят что никаких ошибок не выдавалось (но этому верить нельзя...).
Ну в принципе на таких компах как у нас вылет программы может произойти без проблем если на некоторых экземплярах файлы теряются, то вылет возможен, а вот служба как раз всё и перезапустит.


 
kami ©   (2006-08-25 08:04) [21]

function WTSQueryUserToken(SessionId: DWord;var phToken: THandle): bool; stdcall; external "wtsapi32.dll";
function WTSGetActiveConsoleSessionId: DWord; stdcall; external "kernel32.dll";


> может что-то не правильно

Надо MSDN смотреть, прежде чем объявлять функции.
> Не работают эти функции

Работают прекрасно, уже давно пользуюсь их работоспособностью.


 
Ketmar ©   (2006-08-25 09:52) [22]

> [20] VitalikS   (25.08.06 06:15)
> если на некоторых экземплярах файлы теряются
"в военных условиях значение синуса может достигать четырёх" (ц)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
15-1158627488
Mutnauq
2006-09-19 04:58
2006.10.08
D10Lite


15-1158205348
PSPF2003
2006-09-14 07:42
2006.10.08
Какой Linux?


1-1156613300
Destroyer
2006-08-26 21:28
2006.10.08
Остановка потока


1-1156939185
matyx
2006-08-30 15:59
2006.10.08
функция GetSystemTime выдаёт неправильное время


3-1154942212
cosmos
2006-08-07 13:16
2006.10.08
не проходит запрос INSERT INTO в ACCESS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский