Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

"Image File Execution Options" и параметр debugger   Найти похожие ветки 

 
enzain ©   (2015-01-07 15:02) [0]

Всех приветствую.
Мой очередной глупый вопрос, инфу не нашел - или ее нет или плохо искал.
В реестре виндовс, существует такая замечательная возможность для приложения указать дебаггер.
В ветке:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
создается папка соответствующая имени приложения.
например: 1cv7.exe
Внутри - можно задать параметр "debugger" в котором указать приложение которое будет запускаться при попытке запустить прилоежние 1cv7 в моем случае..
Так вот, меня интересует следующее: такие приложения должны быть как то специализированно написаны, или это стандартные приложения для которых в качестве параметра передается просто полный путь и имя запускаемого файла?
На данный момент рассматриваю следующую задачу:
создать "загрузчик" для приложения 1с. При запуске этот загрузчик подключается к базе данных, проверяет - можно ли пользователям сейчас работать с определенными базами, если можно то добавляет эти базы в список баз,  если нет - то удаляет базы из списка, в окне запуска 1с - удаляются кнопки "добавить", "изменить", "удалить" для исключения ручного редактирования списка баз пользователем.
Сам же загрузчик все время остается активным, и мониторит базу данных - так как вдруг, может понадобиться выгнать всех пользователей из базы. В таком случае я так понимаю, храня хендл запущенной 1с, можно получить ее процессид, и грохнуть при необходимости.

ПС: если все получится, могу даже поделиться, все равно занимаюсь от делать нефиг ... потому что прогерам 1с захотелось не напрягаться чтобы выгнать пользователей при необходимости обновления .. :)


 
Inovet ©   (2015-01-07 16:00) [1]

> [0] enzain ©   (07.01.15 15:02)
> можно получить ее процессид, и грохнуть при необходимости

Ну ты и садист.


 
enzain ©   (2015-01-07 17:27) [2]

Я садист? .. Нет, я не садист, можно конечно послать 1сников лесом, дать номера всех телефонов, и пусть обзванивают ...
Но тут просто самому интересно что получится... да и получится ли вообще ... таки семерка в этом плане не очень, а переходить на восьмерку - бабла немеряно надо ...  учитывая что от первоначальной конфигурации осталось только название :)


 
enzain ©   (2015-01-07 17:30) [3]


> Ну ты и садист.

И кстати, если база в SQL лежит ничего садистского в этом не вижу ... если в файлах то да ... реиндексация гарантирована :)


 
enzain ©   (2015-01-07 18:51) [4]

В общем, с тем как передается место расположения и имя файла разобрался.
Передается просто в качестве параметра командой строки. (с номером 1)

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

Куды копать?


 
Inovet ©   (2015-01-07 19:00) [5]

Ага, пользователь вводит данный, тут раз программа прибилась. Не знаю что там в 1с доступно, но варианты есть без гроханья процесса и с предупреждением пользователя или хотя бы с сохранением данных. В голову сразу приходит что-то такое:
1. Сделай в базе флаг в какой-нить таблице, при необходимости выхода выставляй, а конфигурация пусть его проверяет 1 раз в 5 минут, и выходит.
2. По сети можно послать сообщение о необходимости выхода, а пргограмма бедет его обрабатывать и выходить.
3. Создать файл "NeedQuit.txt" в поределённом месте, а программа проверяет его наличие.


 
enzain ©   (2015-01-07 19:55) [6]

сообщение о том, что через 2 минуты программа закроется - выдаваться будет... наверное... если прогерам не лень будет ждать эти 2-5 минут...тут уже вопрос не ко мне.
То, что кто-то на терминале просто свернул его, и не сохранился, или просто закрыл окно терминала вообще не завершив сессию - его проблемы. Да да, именно его, а не мои. Сохраняй потом сворачивай. А еще лучше если не работаешь - вообще выходи, зайти в 1с дело 15 секунд.
По поводу пункта 2 - да, вы действительно видимо не знаете что там в 1с доступно ... особенно в семерке... это не в упрек - я вам реально завидую ... :)


 
enzain ©   (2015-01-07 19:57) [7]

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) [8]

мда.. и как бы не пришлось выдавать юзерям разрешение на дебаггинг .. надо проверить .. а то может и заморачиваться не стоит :(


 
Inovet ©   (2015-01-07 20:08) [9]

> [6] enzain ©   (07.01.15 19:55)
> вы действительно видимо не знаете что там в 1с доступно

Ну так там, насколько я знаю, можно что-то расширять через внешние библиотеки.


 
enzain ©   (2015-01-07 20:15) [10]

Если бы все так просто было, уже бы была куча выгонялок из 1с нормальных ...
А самое актиуальное для семерки по сей день это телефон ... и вперед обзванивать пользователей... :)
в восьмерке вроде с этим получше.. но восьмерошные прогеры меня вообще не трогают ... сидят там себе, делают что-то, обновляют что-то.. не видно и не слышно их ... :)


 
enzain ©   (2015-01-08 12:31) [11]


> enzain ©   (07.01.15 19:57) [7]

Так у кого нибудь есть мысли по этому поводу?


 
enzain ©   (2015-01-08 18:01) [12]

repeat
  begin
    WaitForDebugEvent(de, 1000);
    application.ProcessMessages;
    ContinueDebugEvent(de.dwProcessId, de.dwThreadid,  dwContinueStatus);

  end;
  until de.dwDebugEventCode=EXIT_PROCESS_DEBUG_EVENT;

как то так ... теперь все запускается, все события более менее - отлавливаются.... попытаться чтоли понять еще и какие файлы открыты приложением ... точнее какие файлы оно открывает ...



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

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
15-1452693339
кгшзх
2016-01-13 16:55
2017.01.15
TClientDataSet склеить датапакеты


2-1424257125
SvetaZ
2015-02-18 13:58
2017.01.15
компонент TImage при больших размерах


15-1456754444
K-1000
2016-02-29 17:00
2017.01.15
Как объединить несколько матриц для SetWorldTransform()?


2-1432218936
Пауло Сержио
2015-05-21 17:35
2017.01.15
поиск по подчинённой таблице


15-1457295903
Юрий Зотов
2016-03-06 23:25
2017.01.15
Веселые картинки