|
v7: КомандаСистемы не отрабатывает... | ☑ | ||
---|---|---|---|---|
0
MWWRuza
гуру
20.04.22
✎
23:20
|
Добрый вечер!
Понадобилось сделать утилиту обслуживания базы ПрайсЧекера(иногда рушатся индексы, а база Парадокс, и встроенного средства реиндексации не предусмотрено, поэтому решил через бекапы проблему решить). Нужно просто останавливать службу, копировать файлы базы, и потом запускать службу. Дел на 15 минут, быстренько написал, протестировал - все идеально работает, службой рулю через КомандаСистемы Net Start/Stop. Стал ставить клиенту, и вот тут вылезла проблеммка... У себя-то я писал и отлаживал, предпологая, что все это на одном компе крутится, а у клиента 1С на сервере, к которому подключается клиент по RDP, и служба ПрайсЧекера на клиентском компе(Почему так - ну, так сложилось, не захотел ПрайсЧекер видить службу по сети на сервере, пришлось на клиентском компе поднять, это уже давно, больше года так работает). Почитал, нашел, как управлять службами удаленного компьютера - оказывается, вариантов куча. Перепробовал много чего, и добился, что такой командой, из консоли CMD сервера, останавливаю/запускаю службу на клиенте: PsService.exe \\M-001 -u Manager -p 1978 stop srvPricechecker В принципе - работает нормально. Но, когда я пытаюсь делать это из 1С, так: КомандаСистемы("PsService.exe \\M-001 -u Manager -p 1978 stop srvPricechecker"); то почему-то не работает... Казалось бы, какая разница? Что из консоли, что через КомандаСистемы... Пробовал 1С и из под Администратора запускать, и так... Все равно не работает. Куда копать? |
|||
1
Franchiser
гуру
21.04.22
✎
00:27
|
В сторону запуска через vbs / js
|
|||
2
mikecool
21.04.22
✎
00:30
|
(0) это как я базу решил резать запросом через 1с++
выполнение ушло в зависон на 2 дня(без движухи на скуле), запрос в консоли скуля - 2 часа хз - почему ) |
|||
3
Злопчинский
21.04.22
✎
02:11
|
Что значит "не работает"?
|
|||
4
andrewalexk
21.04.22
✎
08:23
|
(0) :)
у меня иногда двойные кавычки помогали а проще сделать батник проверить ручками потом из 1с запустить |
|||
5
Franchiser
гуру
21.04.22
✎
09:42
|
Да , там скорее всего со слешами что-то не то
|
|||
6
MWWRuza
гуру
21.04.22
✎
09:43
|
(3) Да х.з.... Запускаю команду системы из под 1С, окошко черное промелькивает, захожу на клиентский компТимВиевером, а служба как работала, так и работает. Если ту-же команду делаю "пешком", без 1С, из окна CMD, то служба останавливается, и стартует, если в команде stop на start поменять.
|
|||
7
MWWRuza
гуру
21.04.22
✎
09:44
|
Кстати, с батником идея хорошая... Сегодня вечером попробую.
|
|||
8
Builder
21.04.22
✎
09:45
|
(0) Полный путь до PsService.exe укажи, скорее всего он запускает из своей папки и тупо не видит PsService
|
|||
9
MWWRuza
гуру
21.04.22
✎
09:47
|
Пробовал. Первым делом это в голову пришло.
Он хоть и лежит в систем32, но все равно. Кстати, а может ему именно Систем32 не нравится? Система там 64 бита, может надо его в СисВау64 положить? |
|||
10
MWWRuza
гуру
21.04.22
✎
09:57
|
Из СП:
Параметры: <СтрокаКоманды> - строка, содержащая команду. Последовательность поиска программы (если не задан путь): текущий системный каталог; каталог Windows; системный каталог Windows; все каталоги, указанные в переменной PATH. По идее, должно работать и без указанмя пути... Только что они имеют в виду под "системный каталог Windows" - ? Может от разрядности системы зависит, и в Систем32, 64 битная система, "с подачи 1С", и не заглядывает? |
|||
11
MWWRuza
гуру
21.04.22
✎
10:01
|
А вот "промелькивающее окошко", может можно как-то в файл переназначить, что-бы увидеть, что там происходит, может там явно ошибка описана? Ну, типа через ">" и путь к файлу, в конце команды... Будет такая конструкция работать?
|
|||
12
Builder
21.04.22
✎
10:02
|
(11) Сделай cmd файл и его запускай, в нем паузу в конце, все будет срезу видно.
|
|||
13
MWWRuza
гуру
21.04.22
✎
10:04
|
(12) Попробую.
|
|||
14
MWWRuza
гуру
21.04.22
✎
17:58
|
Хм... Все оказалось еще интереснее. Сделал для начала бат файл для локальной остановки/запуска сервиса с таким содержимым:
NET STOP srvPricechecker Не работает, прав не хватает... При этом, в свойствах файла, в "Совместимости" установить галочку "Запускать от имени администратора", не дает - она просто не активна. Есть конечно вариант, создать ярлык, и в дополнительных свойствах ярлыка поставить эту галочку. Но, при этом, из 1С запущенной от имени администратора, эта команда работает, получается, 1С как в случае с ярлыком, переносит свои права на команду системы. На просторах интернета, нашел такой скрипт, для временного повышения прав исполняемого бат/смд до админских: echo off :: BatchGotAdmin ::------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REM --> If error flag set, we do not have admin. if '%errorlevel%' NEQ '0' ( echo Requesting administrative privileges... goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" set params = %*:"=" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" exit /B :gotAdmin pushd "%CD%" CD /D "%~dp0" ::-------------------------------------- ::ENTER YOUR CODE BELOW: Работает, и без ярлыка, просто щелчком по файлу. Пока до управления службами по сети не добрался, там люди работают, мешать не хочется... |
|||
15
MWWRuza
гуру
22.04.22
✎
12:14
|
В общем, переделал в 1С на батники, для универсальности. Командой системы запускаю бат из каталога базы. 1С по любому запускается от администратора, так, что работает и без добавки на повышение прав из предыдущего поста.
Для тех клиентов, у которых база ПЧ лежит на том же компе, где работает 1С - просто через NET STOP/START, одной строкой в батнике(ну, или если 1С не от админа, то с добавкой скрипта для повышения прав). Для тех, у кого 1С и база ПЧ на разных компах - через PsService.exe. А со скриптом повышения прав или нет - в зависимости от того, как 1С запускается. Если что, бат проще отредактировать, чем обработку(в составе конфигурации 1С) - можно "на ходу" не останавливая пользователей базы 1С. Поднял дома на втором компе службу и базу ПЧ - у меня работает - останавливается, копируется, стартует, вообще все как задумано. Клиентам пока не ставил, подожду удобного момента. |
|||
16
vladmenleo
22.04.22
✎
12:44
|
(15) Давным-давно программировал на Delphi и Paradox базы были у меня практически основные. Для переиндексации была такая утилита DTUTIL32.EXE. Гуглится на раз, может проще ей переиндексировать?
|
|||
17
MWWRuza
гуру
22.04.22
✎
13:32
|
(16) Да, возможно... Но, я с Парадоксом вообще не работал, и структуру его базы/индексов не понимаю...
Вот так выглядит база: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-441.jpg Как видим, там два файла DB... И куча еще каких-то файлов... могу предположить, что индексы - это PX... А что такое - VAL, XGO, YG0 - ??? Почему у одного файла DB есть по одному файлу с таким-же именем всех расширений, а у второго только PX и VAL - ? Все файлы создаются при установке программы из дистрибутива. Если удалить(ну, наверно и если повредится) любой из них - программа не запускается... Если реиндексировать утилитой, она создаст все необходимые файлы, или только PX - ??? Где структура всего-этого безобразия прописана, (в 1С, в словаре метаданных DD), а тут где? В ЕХЕшнике? Поэтому, так, с наскока я не понял, как это работает, и решил ограничиться бекап/ресторе, хотя реиндексация была бы правильнее. |
|||
18
vladmenleo
22.04.22
✎
14:00
|
(17) PX это первичный индекс по ключу, а остальные дополнительные, их может быть несколько, а может и не быть совсем. Т.е. идея парадокса всегда должен быть первичный ключ по автоинкрементному полю, а остальные уже создает пользователь какие хочет по всяким полям. если к примеру far-ом по f3 глянуть внутрь, то в начале файла будет видно из чего состоит ключ типа pole1+pole2...
|
|||
19
MWWRuza
гуру
22.04.22
✎
14:46
|
(18) Ясно, что ничего не ясно... Если переиндексировать утилитой, то скорее всего переиндекируются только первичные индексы.
А остальные, "уже создает пользователь", т.е. в моем случае - программа при инсталяции. И к сожалению, без них уже установленная служба стартует, но не создает их сама, видимо, косяк разработчиков - не умеет... Если их удалить, и оставить только первичные, то так и остаются только два PX без остальных... На сколько они нужны и критичны для работы, я х.з... |
|||
20
MWWRuza
гуру
22.04.22
✎
15:50
|
И вообще, странный этот Парадокс...
Решил все-таки утилиту попробовать: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-442.jpg Был файл БД ~59 MB, после утилиты стал ~3 MB, индекс был ~6 MB, стал 238 KB. Файл на просмотр открывается: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-443.jpg количество записей не поменялось, как было 7587 в исходном, так и осталось... Это как? В 20 раз файл похудел? Сжатие таблицы, очистка от удаленных записей? Но не в 20 же раз? Что-то тут не то... Попробовать оба файла обработать таким образом, и посмотреть, как будет реальный ПЧ с этой бвзой работать? Но, все равно нет доп. индексов, и не понятно, как их создать. |
|||
21
MWWRuza
гуру
22.04.22
✎
18:26
|
В общем, с реиндексацией утилитой, более-менее разобрался.
Во первых, она восстанавливает все индексы, какие есть, в том числе и дополнительные. Скорее всего, их структура определяется файлами VAL. Это, типа DD в 1С, только для одного файла DB. Во вторых, файлы "раздутых" размеров, были скорее всего, все-таки из-за удаленных записей, так, как в эту базу ПЧ(тестовая на моем компе) грузилось не один раз, и с разных баз. Естественно, там товар/штрихкоды где-то пересекались, а где-то нет, поэтому, там удаленных записей куча. После утилиты, база сжимается, и уменьшается в объеме. Загрузив в "сжатую" базу товар с одной из маленьких баз, объем базы ПЧ не изменился почти. Остается теперь только разобраться, как запустить переиндексацию из командной строки... Я так понимаю, что "DTUTIL32.EXE" это просто GUI к "tutil32.dll", и она по сути не нужна, надо батник писать к длл-ке, и его из под 1С(или, вообще ярлыком с рабочего стола на том компе где база) запускать... |
|||
22
MWWRuza
гуру
22.04.22
✎
21:35
|
(9) Кстати, а может ему именно Систем32 не нравится? Система там 64 бита, может надо его в СисВау64 положить?
Да, именно так. На 64 битной винде, утилита "PsService.exe" положенная в System32, из батника, без указания пути не находится. Скопировал в SysWOW64 и все полетело. Отрабатывает батник со строкой "PsService.exe \\M-001 -u Manager -p 1978 stop[start] srvPricechecker" из 1C через КомандаСистемы. Но, со скриптом на переиндексацию, все равно вопрос открытый :-) По любому, start\stop службы, и для переиндексации понадобится, так, что будем считать это первым шагом к более совершенному скрипту. |
|||
23
ДедМорроз
22.04.22
✎
21:50
|
Самый простой вариант - скрипты положить на клиентскую машину,а зарускать через создание процесса по wmi.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |