12.01.2007, 18:38 | #41 |
Участник
|
Дело в автоматизации и распределенности. как же мы сейчас работаем, если договориться не можем? просто это автоматизированная договоренность.
|
|
03.04.2007, 13:46 | #42 |
Участник
|
BuilderC++ ругается при компиляции на параметы в функциях aosmgr.dll. Как правильно подключить эту библиотеку к проекту. Есть ли подробное описание функций бибилиотеки?
|
|
03.04.2007, 15:36 | #43 |
Участник
|
Для Builder'а не знаю, но для VisualC можно так
Файл "aosmgr.h" X++: #ifndef _AOSMGR_H_ #define _AOSMGR_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include <windef.h> typedef UINT (CALLBACK * LPFNDLLAOSSTATUS)(char* Host, char* AOSname); typedef UINT (CALLBACK * LPFNDLLAOSSTART)(char* Host, char* AOSname); typedef UINT (CALLBACK * LPFNDLLAOSSTOP)(char* Host, char* AOSname); #ifdef __cplusplus } #endif /* __cplusplus */ #endif X++: // AxAosMgr.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windef.h> #include <winbase.h> #include <winuser.h> #include <malloc.h> #include "aosmgr.h" char * GetStatusStr(int _status) { switch (_status) { case 1: return "AOS остановлен"; case 2: return "AOS запускается"; case 3: return "AOS останавливается"; case 4: return "AOS запущен"; case -1: return "Connection timed out"; case -2: return "Connection refused"; case -3: return "Protocol error"; case -4: return "Server manager not started"; case -5: return "AOS stopped"; case -6: return "AOS start pending"; case -7: return "AOS stop pending"; case -8: return "AOS running"; case -9: return "AOS not found on server"; case -10: return "Cannot assign requested address"; case -11: return "Unknown TCP error"; case -12: return "AOS unknown status"; case -13: return "Access denied"; case -14: return "Service error"; case -15: return "Invalid Axapta Service Name"; case -16: return "Service Does Not Exist"; case -17: return "Service Not Started"; case -18: return "Server Unavailable"; default: return "Unknown status"; } } int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE hDLL; LPFNDLLAOSSTATUS AOSStatus; LPFNDLLAOSSTART AOSStart; LPFNDLLAOSSTOP AOSStop; char* msg; hDLL = LoadLibrary("AosMgr.dll"); if (hDLL != NULL) { AOSStatus = (LPFNDLLAOSSTATUS)GetProcAddress(hDLL, "AosStatus"); if (!AOSStatus) { FreeLibrary(hDLL); return -1; } /* AOSStart = (LPFNDLLAOSSTART)GetProcAddress(hDLL, "AosStart"); AOSStop = (LPFNDLLAOSSTOP)GetProcAddress(hDLL, "AosStop");*/ msg = GetStatusStr(AOSStatus("Axapta", "Axapta")); if (msg) { char * buf = (char*) malloc(strlen(msg)+1); strcpy(buf, msg); CharToOem(buf, buf); printf("%s\n", buf); free(buf); } } return 0; }
__________________
Axapta v.3.0 sp5 kr2 |
|
03.04.2007, 16:53 | #44 |
Участник
|
Большое спасибо, AndyD!!!!!
|
|
04.09.2007, 11:18 | #45 |
Участник
|
Уважаемый AndyD возникла необходимость воспользоваться вашей утилитой. При запуске из командной строки:
rundll32 AosMgr.dll,AosStart_RunDll serverName aosName происходит сбой аоса, после которого он не запускается даже через Service Manadger лог ошибки: Ошибка1: "Описание: Object Server Dev: Fatal SQL condition during login. Error message: "Внутренний системный номер версии таблицы, хранящейся в базе данных, больше, чем версия, поддерживаемая ядром (33/31). Используйте более новое ядро Microsoft Business Solutions-Axapta, или запустите Microsoft Axapta используя параметр -REPAIR командной строки, чтобы провести синхронизацию." " Ошибка2 "Object Server Dev: Axapta Server received an invalid socket" У нас Axapta 3.0 CIS SP3 build 9.2 Буду признателен за ответ |
|
04.09.2007, 14:23 | #46 |
Участник
|
А кто у вас на сервере слушает порт TCP 2712?
Service Manager - это имеется в виду Server Manager? Схема работы dll-ки такая. По порту TCP 2712 идет обращение к Server Manager (Ax32mgr.exe). А уже Server Manager при необходимости загружает нужный инстанс AOS (ax32serv.exe) Для проверки, попробуйте запустить утилиту axctrl.exe (утилита для настройки AOS) с удаленной машины и поуправлять сервером
__________________
Axapta v.3.0 sp5 kr2 |
|
04.09.2007, 15:01 | #47 |
Участник
|
Цитата:
Service Manager - это имеется в виду Server Manager?
Цитата:
Схема работы dll-ки такая.
По порту TCP 2712 идет обращение к Server Manager (Ax32mgr.exe). А уже Server Manager при необходимости загружает нужный инстанс AOS (ax32serv.exe) Для проверки, попробуйте запустить утилиту axctrl.exe (утилита для настройки AOS) с удаленной машины и поуправлять сервером |
|
16.11.2007, 17:06 | #48 |
Developer
|
Ув. AndyD!
Во-первых, спасибо за оч. полезную библиотеку! А во-вторых, позвольте задать Вам пару вопросов: 1. Знаете ли Вы как (не партнеру) можно найти информацию о принципах управления Server Manager (Ax32mgr.exe) по порту TCP 2712 (инет, доки, книги)? 2. Возможно ли подобным образом управлять и "режимом запуска" АОСа (manual, on demand)? И (в случае положительного ответа) может Вы бы согласились доработать Вашу библиотеку для управления "режимом запуска" АОСа ? Заранее, спасибо. |
|
16.11.2007, 17:54 | #49 |
Участник
|
1. Сомневаюсь, что бы в открытом доступе была подобная информация.
2. Эту операцию необходимо выполнять программно?
__________________
Axapta v.3.0 sp5 kr2 |
|
20.11.2007, 12:09 | #50 |
Developer
|
Извините, что не смог ответить сразу.
Спасибо. Да... желательно. Иногда возникает необходимость остановить все АОСы (три штуки на разных серверах) и выставить им режимом запуска = "manual" для предотвращения автоматического запуска. И, соответственно, после выполненных работ, необходимо их запустить и выставить им режимом запуска = "on demand". Если есть возможность програмно управлять режимом запуска АОСа, то данную процедуру можно автоматизировать. |
|
20.11.2007, 13:38 | #51 |
Moderator
|
Присоединяюсь к просьбе vallys.
__________________
Андрей. |
|
20.11.2007, 14:05 | #52 |
Участник
|
Цитата:
Сообщение от vallys
Иногда возникает необходимость остановить все АОСы (три штуки на разных серверах) и выставить им режимом запуска = "manual" для предотвращения автоматического запуска. И, соответственно, после выполненных работ, необходимо их запустить и выставить им режимом запуска = "on demand". Если есть возможность програмно управлять режимом запуска АОСа, то данную процедуру можно автоматизировать.
|
|
|
За это сообщение автора поблагодарили: vallys (2). |
20.11.2007, 15:28 | #53 |
Developer
|
Цитата:
На одном как раз есть. Для тестового и др. временных АОСов отдельный сервер не выделен. Так что вопрос остается открытым. Но за предложение спасибо, на текущий момент два АОСа из трех действительно можно так остановить. Кстати, будет ли выдано предупреждение пользователям, что АОС останавливается, если остановить сервис Axapta Object Manager? |
|
20.11.2007, 16:16 | #54 |
Developer
|
|
|
20.11.2007, 17:51 | #55 |
Участник
|
Цитата:
Цитата:
Сообщение от vallys
Не будет. Вопрос открыт.
Код: ' константы, обозначающие ветки реестра const HKCR = &H80000000 const HKCU = &H80000001 const HKLM = &H80000002 const HKU = &H80000003 const strAOSkey = "system\currentcontrolset\services\axapta object server\applications" const strAOSsvc = "Axapta Object Server" const strHost = "." ' подставить нужное имя хоста; точка == localhost set oWshShell = CreateObject("WScript.Shell") set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strHost & "\root\default:StdRegProv") oReg.EnumKey HKLM, strAOSkey, colKeys ' тормозим все AOS'ы, о которых есть упоминания в реестре for each objKey in colKeys WScript.Echo "Stopping AOS '" & objKey & "' at " & strHost oWshShell.Run "rundll32.exe AosMgr.dll,AosStop_RunDll " & strHost & " """ & objKey & """ 1", 7, True next ' тормозим службу Axapta Object Manager set oWMI = GetObject("winmgmts:\\" & strHost & "\root\cimv2") oWMI.ExecMethod("Win32_Service.Name='" & strAOSsvc & "'", "StopService") set oReg = nothing set oWshShell = nothing set oWMI = nothing |
|
20.11.2007, 19:11 | #56 |
Developer
|
Действительно... что ж это я так...
Все понятно, спасибо за наглядный пример. Только на одном сервере все-таки не охота глушить сервис из-за работы других АОСов. |
|
08.10.2008, 12:46 | #57 |
Moderator
|
Вновь подниму тему, вдруг у кого какие полезные мысли появились? Остался открытым вопрос: можно ли программно менять режим запуска AOS с "On Demand" на "Manual" и обратно?
__________________
Андрей. |
|
09.10.2008, 14:56 | #58 |
Участник
|
Выкладываю обновление dll.
AosSetStartupTypeAutomatic_RunDll AosSetStartupTypeManual_RunDll AosSetStartupTypeDisable_RunDll AosSetStartupTypeOnDemand_RunDll - ряд функций для установки типа запуска AOS. Названия функций соответствуют выполняемому действию (пример использования - в файле startupDisable.cmd). Правила вызова функций остаются прежними: rundll32 AosMgr.dll,AosStatus_RunDll Axapta "Aaa 1" 1 После имени вызываемой функции указывается имя хоста или IP адрес. Второй параметр - имя AOS. Если в имени есть пробелы, то заключить в двойные кавачки. Третий параметр - показывать (1)/не показывать (0 или не указывать параметр) сообщение в случае ошибки В методы, вызываемые из RunDll добавлено возвращение кода возврата (можно обрабатывать через errorlevel). Во вложении есть пример обработки возвращаемого статуса в файле start.cmd (для всех методов обработка одинаковая)
AosSetStartupType - для установки информации о типе запуска AOS В архиве вложен проект для Аксапты с реализацией класса управления AOS Все функции, изменяющие статусы/останавливающие/стартующие AOS для своего выполнения требуют наличия соответствующих прав
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (6), raz (5), vallys (2), virhundo (1). |
10.10.2008, 11:19 | #59 |
Moderator
|
AndyD, респект!
__________________
Андрей. |
|
01.12.2008, 20:10 | #60 |
Участник
|
Что то у меня не правильно работает обработка статуса при стопе:
X++: :stop_AOS echo STOP AOS: "%X_AOSNAME%@%X_AOSSERVER%" rundll32 %AOS_BIN%/AosMgr.dll,AosStop_RunDll %X_AOSSERVER% %X_AOSNAME% 0 :check_AOS_STOPStatus sleep 2 rundll32 %AOS_BIN%/AosMgr.dll,AosStatus_RunDll %X_AOSSERVER% %X_AOSNAME% 0 if errorlevel 1 goto exit_OK goto check_AOS_STOPStatus Это так и должно быть? Спасибо за утилитку! |
|
Теги |
aos, ax3.0, download, faq, администрирование, законченный пример |
|
|