Использование (вызов) WinAPI-функций в 1С8.2 #806637


#0 by AlexCom
Господа программисты! Помогите решить следующую задачу: Мне нужно запустить 1С8.2 базу и зафиксировать ID этого процесса Стал эту задачу решать так: Если блок заработает, то из Info получу ID потока. Но блок не работает! Где-то ошибаюсь с параметрами функции CreateProcess типа указатель, неправильно вызываю ... Может у кого-нибудь был опыт использования функций WinApi или решение проще ...
#1 by H A D G E H O G s
WinAPI.CreateProcess("",СтрокаЗапуска, СтрокаЗапуска - тут требуется указатель.
#2 by kittystark
[/1с]
#3 by AlexCom
kittystark, Можно по подробнее Уточню задачу: у меня куча баз 1С. Когда я запускаю какую-нибудь из них, я хочу зафиксировать где-нибудь ID этого процесса для того, чтобы грохнуть в последствии (по ID найду и уничтожу). Написал вызов на Delphi: Мне надо просто разобраться с работой с указателями в 1С, переложить этот код в 1С (допустим), что не получается у меня
#4 by AlexCom
H A D G E H O G s, как конкретно написать указатель в 1С Можно кусок кода?
#5 by kittystark
значит смотри, чуток академических знаний: указатель как тип данных есть в С / C++ / Pascal / Delphi и т.д., но в 1С его нет (работа с системной памятью напрямую недостпуна, т.к. есть своя модель объектов, и воспользоваться фишками ООП типа наследование / полиморфизм / инкапуляция от этой модели не получится) код приведенный в можно попытаться выполнить в ПриНачалеРаботыСистемы модуля приложения (или модуля управляемого приложения) и полученный PID уже оттуда впихнуть куда-нибудь, например в файл и т.д. подумай на тему того, что может тебе лучше воспользоваться COM-сервером 1С тип Application или connector для своих целей? запустить для того чтобы потом грохнуть... можно конечно по разному использовать 1С, что в процессе работы нужно то?
#6 by AlexCom
kittystark, спасибо за ответ, но это я знаю. Вопрос только в том, что КАК воткнуть Delphi-код в модуль 1С. Мне не удается перевести в язык 1С указатели (как Вы писали, в 1С их нет - в том то и дело). Или может быть весь Delphi-код как макрос можно вставить в 1С, но я не знаю, как это сделать. Вопрос - какие параметры (в каком виде) подсунуть в функцию CreateProcess в модуле 1С, как инициализировать StartUpInfo, ProcessInfo - это же указатели А задача такая: Пользователь открывает свои базы, работает ... В некоторый момент администратор отключает некоторые базы или меняет права на доступ к базам. Удаленный пользователь попучает уведомление на экран, что определенная база отключается, допустим, на регламентные работы, и через 3 минуты, допустим, база закрывается сама. Для закрытия мне нужно знать ID процесса. Примерно так. Мне легче написать службу на Delphi, и раскатить её на все компы, но установка компании - писать всё на 1С, и это наверное правильно. Приходится придумывать. В принципе всё почти готово, остался этот кусок пройти. Получается, кроме как в ID процесса мне привязаться не к чему. Путь2: При запуске 1С-базы командная строка вызова тоже привязывается к win-процессу. Зная командную строку процесса и строку вызова 1С (они почти равны), я могу найти рабочий win процесс по этой строке. И опять упираются в API-функции (Process32First ...). Т.е. легче не стало. 1 вариант легче :)
#7 by Филиал-msk
И тут внезапно 1С падает не успев сообщить тебе о закрытии и через некоторое время ее пид получает фотошоп (: 1С тут совсем не нужна. Совсем. Пиды с легкостью вычитываются по необходимости из списка процессов при желании их убийства. Экземпляр базы определяется по параметрам командной строки.
#8 by Филиал-msk
И вообще, не ипи народу мозг переводом кода с престарелого дельфи на актуальный 1С. Напиши на своем дельфи внешнюю компоненту, грузи ее в 1С и извращайся как душа пожелает.
#9 by kittystark
а...   свою выгонялку пользователей пишешь... во первых есть стандартный функционал блокировки сеансов во вторых таких поделок много, поищи если хочется посношаться, то как вариант - заводишь одну константу - кол-во секунд до выхода, при логине каждого пользователя в приначалеработысистемы подключаешь обработчик ожидания скажем раз в 30 сек., в котором анализируешьь ее и по ее значению - или вывоводишь сообщение (>0) - или выгоняшь и блокруешь вход (=-1) - или оставляешь работать (=0) а вторую константу - пользователь блокировщик чтоб под ним можно было всегда войти не взирая на значение первой константы, ну и плюс чтоб его не выкидывало
#10 by AlexCom
Так как начался флуд, тема закрыта
#11 by AlexCom
kittystark, Это тоже известно У нас баз - несколько сотен, большинство типовых, не снятых с поддержки, конфигурация закрыта или почти закрыта, в общем менять нельзя и т. д. Задача не должна затрагивать конфигурации, т. к. базы появляются и удаляются ... Задача наверное должна решаться в том виде, как предложено, как отдельный обший механизм 2. Блокировка сеансов? А если файловый вариант?
#12 by Филиал-msk
... и тысячи паровых машин. При этом программированием занимается не 1Сник, а дельфист. Сказочная контора.
#13 by Филиал-msk
Менять нельзя, но при старте конфигурация должна научится что-то делать с pid. Причем все тысячи баз. Волшебство!
#14 by TormozIT
Подойдет Native ВК?
#15 by TormozIT
Не подойдет. Надо будет дописать свою функцию, взяв за основую метод Run.
#16 by AlexCom
TormozIT, Большое спасибо !!! Буду смотреть Самое главное - исходники есть!
#17 by lamina
а разве можно подключить внешнюю компоненту без снятия все ваших баз с поддержки или подключений расширений?
#18 by Филиал-msk
Тссссс =) Чувак в 09.31 тему вообще закрыл. Он Пытается с Заглавной Буквы.
#19 by MM
А разве в структуре STARTUPINFO не нужно заполнить поле cb - The size of the structure, in bytes?
#20 by TormozIT
Конечно можно. ИР же это делает как раз через native ВК, ссылку на которую я дал в .
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С