![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Image File Execution Options" и параметр debugger
enzain © (2015-01-07 15:02:00)Всех приветствую.
Мой очередной глупый вопрос, инфу не нашел - или ее нет или плохо искал.
В реестре виндовс, существует такая замечательная возможность для приложения указать дебаггер.
В ветке:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
создается папка соответствующая имени приложения.
например: 1cv7.exe
Внутри - можно задать параметр "debugger" в котором указать приложение которое будет запускаться при попытке запустить прилоежние 1cv7 в моем случае..
Так вот, меня интересует следующее: такие приложения должны быть как то специализированно написаны, или это стандартные приложения для которых в качестве параметра передается просто полный путь и имя запускаемого файла?
На данный момент рассматриваю следующую задачу:
создать "загрузчик" для приложения 1с. При запуске этот загрузчик подключается к базе данных, проверяет - можно ли пользователям сейчас работать с определенными базами, если можно то добавляет эти базы в список баз, если нет - то удаляет базы из списка, в окне запуска 1с - удаляются кнопки "добавить", "изменить", "удалить" для исключения ручного редактирования списка баз пользователем.
Сам же загрузчик все время остается активным, и мониторит базу данных - так как вдруг, может понадобиться выгнать всех пользователей из базы. В таком случае я так понимаю, храня хендл запущенной 1с, можно получить ее процессид, и грохнуть при необходимости.
ПС: если все получится, могу даже поделиться, все равно занимаюсь от делать нефиг ... потому что прогерам 1с захотелось не напрягаться чтобы выгнать пользователей при необходимости обновления .. :)
enzain (2015-01-08 18:01:00) [1]
repeat
begin
WaitForDebugEvent(de, 1000);
application.ProcessMessages;
ContinueDebugEvent(de.dwProcessId, de.dwThreadid, dwContinueStatus);
end;
until de.dwDebugEventCode=EXIT_PROCESS_DEBUG_EVENT;
как то так ... теперь все запускается, все события более менее - отлавливаются.... попытаться чтоли понять еще и какие файлы открыты приложением ... точнее какие файлы оно открывает ...
enzain (2015-01-08 12:31:00) [2]
> enzain © (07.01.15 19:57) [7]
Так у кого нибудь есть мысли по этому поводу?
enzain (2015-01-07 20:15:00) [3]Если бы все так просто было, уже бы была куча выгонялок из 1с нормальных ...
А самое актиуальное для семерки по сей день это телефон ... и вперед обзванивать пользователей... :)
в восьмерке вроде с этим получше.. но восьмерошные прогеры меня вообще не трогают ... сидят там себе, делают что-то, обновляют что-то.. не видно и не слышно их ... :)
Inovet (2015-01-07 20:08:00) [4]> [6] enzain © (07.01.15 19:55)
> вы действительно видимо не знаете что там в 1с доступно
Ну так там, насколько я знаю, можно что-то расширять через внешние библиотеки.
enzain (2015-01-07 19:57:00) [5]
procedure TForm1.Button1Click(Sender: TObject);
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
{ fill with known state }
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
with StartInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOWNORMAL;
end;
CreateOK := CreateProcess(PChar(ParamStr(1)),nil, nil, nil,False,
DEBUG_PROCESS+CREATE_NEW_PROCESS_GROUP,
nil, nil, StartInfo, ProcInfo);
ShowMessage(IntToStr(ProcInfo.dwProcessId));
end;
Приложение по факту запускается - но окна приложения не видно. В диспетчере задач оно есть ...
Пните в нужную сторону пожалуйста.
enzain (2015-01-07 19:57:00) [6]мда.. и как бы не пришлось выдавать юзерям разрешение на дебаггинг .. надо проверить .. а то может и заморачиваться не стоит :(
enzain (2015-01-07 19:55:00) [7]сообщение о том, что через 2 минуты программа закроется - выдаваться будет... наверное... если прогерам не лень будет ждать эти 2-5 минут...тут уже вопрос не ко мне.
То, что кто-то на терминале просто свернул его, и не сохранился, или просто закрыл окно терминала вообще не завершив сессию - его проблемы. Да да, именно его, а не мои. Сохраняй потом сворачивай. А еще лучше если не работаешь - вообще выходи, зайти в 1с дело 15 секунд.
По поводу пункта 2 - да, вы действительно видимо не знаете что там в 1с доступно ... особенно в семерке... это не в упрек - я вам реально завидую ... :)
Inovet (2015-01-07 19:00:00) [8]Ага, пользователь вводит данный, тут раз программа прибилась. Не знаю что там в 1с доступно, но варианты есть без гроханья процесса и с предупреждением пользователя или хотя бы с сохранением данных. В голову сразу приходит что-то такое:
1. Сделай в базе флаг в какой-нить таблице, при необходимости выхода выставляй, а конфигурация пусть его проверяет 1 раз в 5 минут, и выходит.
2. По сети можно послать сообщение о необходимости выхода, а пргограмма бедет его обрабатывать и выходить.
3. Создать файл "NeedQuit.txt" в поределённом месте, а программа проверяет его наличие.
enzain (2015-01-07 18:51:00) [9]В общем, с тем как передается место расположения и имя файла разобрался.
Передается просто в качестве параметра командой строки. (с номером 1)
Теперь встал другой вопрос, как запускать приложение из моего приложения... ибо при загрузке - оно опять запускает мое же приложение (точнее система я так понимаю запускает )
Куды копать?
enzain (2015-01-07 17:30:00) [10]
> Ну ты и садист.
И кстати, если база в SQL лежит ничего садистского в этом не вижу ... если в файлах то да ... реиндексация гарантирована :)
enzain (2015-01-07 17:27:00) [11]Я садист? .. Нет, я не садист, можно конечно послать 1сников лесом, дать номера всех телефонов, и пусть обзванивают ...
Но тут просто самому интересно что получится... да и получится ли вообще ... таки семерка в этом плане не очень, а переходить на восьмерку - бабла немеряно надо ... учитывая что от первоначальной конфигурации осталось только название :)
Inovet (2015-01-07 16:00:00) [12]> [0] enzain © (07.01.15 15:02)
> можно получить ее процессид, и грохнуть при необходимости
Ну ты и садист.