AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.01.2007, 18:38   #41  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Дело в автоматизации и распределенности. как же мы сейчас работаем, если договориться не можем? просто это автоматизированная договоренность.
Старый 03.04.2007, 13:46   #42  
falcon65 is offline
falcon65
Участник
 
5 / 10 (1) +
Регистрация: 21.09.2005
BuilderC++ ругается при компиляции на параметы в функциях aosmgr.dll. Как правильно подключить эту библиотеку к проекту. Есть ли подробное описание функций бибилиотеки?
Старый 03.04.2007, 15:36   #43  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Для 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
файл "AxAosMgr.cpp" - пример консольного приложения, выводящего информацию о статусе AOS. Использование функций старта/остановки AOS аналогично
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  
falcon65 is offline
falcon65
Участник
 
5 / 10 (1) +
Регистрация: 21.09.2005
Большое спасибо, AndyD!!!!!
Старый 04.09.2007, 11:18   #45  
patron is offline
patron
Участник
 
19 / 12 (1) ++
Регистрация: 29.03.2007
Уважаемый 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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
А кто у вас на сервере слушает порт 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  
patron is offline
patron
Участник
 
19 / 12 (1) ++
Регистрация: 29.03.2007
Цитата:
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  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Ув. AndyD!
Во-первых, спасибо за оч. полезную библиотеку!
А во-вторых, позвольте задать Вам пару вопросов:
1. Знаете ли Вы как (не партнеру) можно найти информацию о принципах управления Server Manager (Ax32mgr.exe) по порту TCP 2712 (инет, доки, книги)?
2. Возможно ли подобным образом управлять и "режимом запуска" АОСа (manual, on demand)? И (в случае положительного ответа) может Вы бы согласились доработать Вашу библиотеку для управления "режимом запуска" АОСа ?

Заранее, спасибо.
Старый 16.11.2007, 17:54   #49  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
1. Сомневаюсь, что бы в открытом доступе была подобная информация.
2. Эту операцию необходимо выполнять программно?
__________________
Axapta v.3.0 sp5 kr2
Старый 20.11.2007, 12:09   #50  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Извините, что не смог ответить сразу.
Цитата:
Сообщение от AndyD Посмотреть сообщение
1. Сомневаюсь, что бы в открытом доступе была подобная информация.
Спасибо.
Цитата:
Сообщение от AndyD Посмотреть сообщение
2. Эту операцию необходимо выполнять программно?
Да... желательно. Иногда возникает необходимость остановить все АОСы (три штуки на разных серверах) и выставить им режимом запуска = "manual" для предотвращения автоматического запуска. И, соответственно, после выполненных работ, необходимо их запустить и выставить им режимом запуска = "on demand". Если есть возможность програмно управлять режимом запуска АОСа, то данную процедуру можно автоматизировать.
Старый 20.11.2007, 13:38   #51  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Присоединяюсь к просьбе vallys.
__________________
Андрей.
Старый 20.11.2007, 14:05   #52  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от vallys Посмотреть сообщение
Иногда возникает необходимость остановить все АОСы (три штуки на разных серверах) и выставить им режимом запуска = "manual" для предотвращения автоматического запуска. И, соответственно, после выполненных работ, необходимо их запустить и выставить им режимом запуска = "on demand". Если есть возможность програмно управлять режимом запуска АОСа, то данную процедуру можно автоматизировать.
Ну вот, сказали бы сразу, какая стоит задача, было б намного проще... Иными словами, необходимо остановить AOS'ы с типом запуска OnDemand на определенное время - так, чтобы они в это время по любому не запускались. Но ведь добиться этого можно и другими способами, кроме запудривания мозгов Axapta Object Manager'у. Главное условие: чтобы на тех же серверах не было других AOS'ов, которые должны на это время оставаться доступными. Так вот, почему бы просто не останавливать на указанное время сервис Axapta Object Manager? Тогда AOS'ы точно не запустятся, пока вы не перезапустите этот сервис, - и не надо будет менять параметры их запуска.
За это сообщение автора поблагодарили: vallys (2).
Старый 20.11.2007, 15:28   #53  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну вот, сказали бы сразу, какая стоит задача, было б намного проще... Иными словами, необходимо остановить AOS'ы с типом запуска OnDemand на определенное время - так, чтобы они в это время по любому не запускались
Да, именно так. Сожалею, что не описал раньше.
Цитата:
Сообщение от gl00mie Посмотреть сообщение
...Главное условие: чтобы на тех же серверах не было других AOS'ов, которые должны на это время оставаться доступными...
На одном как раз есть. Для тестового и др. временных АОСов отдельный сервер не выделен. Так что вопрос остается открытым. Но за предложение спасибо, на текущий момент два АОСа из трех действительно можно так остановить. Кстати, будет ли выдано предупреждение пользователям, что АОС останавливается, если остановить сервис Axapta Object Manager?
Старый 20.11.2007, 16:16   #54  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от vallys Посмотреть сообщение
...Кстати, будет ли выдано предупреждение пользователям, что АОС останавливается, если остановить сервис Axapta Object Manager?
Не будет.
Вопрос открыт.
Старый 20.11.2007, 17:51   #55  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от vallys Посмотреть сообщение
Кстати, будет ли выдано предупреждение пользователям, что АОС останавливается, если остановить сервис Axapta Object Manager?
Цитата:
Сообщение от vallys Посмотреть сообщение
Не будет. Вопрос открыт.
Ну так остановите их предварительно, в чем проблема? Останавливать-то AOS'ы с помощью выложенной здесь dll-ки можно. А получить их список можно из реестра, к примеру, через wmi - равно как и тормознуть сам сервис Axapta Object Manager
Код:
' константы, обозначающие ветки реестра
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
Здесть хоть WshShell.Run и вызывается синхронно (т.е. он вернет управление лишь после завершения запускаемого процесса), однако перед остановкой сервиса все равно лучше вставить какую-нить проверку или паузу. Но общая идея должна быть ясна.
Старый 20.11.2007, 19:11   #56  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну так остановите их предварительно, в чем проблема?
Действительно... что ж это я так...

Цитата:
Сообщение от gl00mie Посмотреть сообщение
...Но общая идея должна быть ясна.
Все понятно, спасибо за наглядный пример.
Только на одном сервере все-таки не охота глушить сервис из-за работы других АОСов.
Старый 08.10.2008, 12:46   #57  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Вновь подниму тему, вдруг у кого какие полезные мысли появились? Остался открытым вопрос: можно ли программно менять режим запуска AOS с "On Demand" на "Manual" и обратно?
__________________
Андрей.
Старый 09.10.2008, 14:56   #58  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Выкладываю обновление dll.
  • Добавлены методы для вызова из командной строки:
AosGetStartupType_RunDll - информация об типе запуска AOS (командный файл startup.cmd с примером вызова и обработки сообщений)

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 (для всех методов обработка одинаковая)
  • Добавлены методы для вызова из среды разработки:
AosGetStartupType - для получения информации о типе запуска AOS
AosSetStartupType - для установки информации о типе запуска AOS

В архиве вложен проект для Аксапты с реализацией класса управления AOS


Все функции, изменяющие статусы/останавливающие/стартующие AOS для своего выполнения требуют наличия соответствующих прав
Вложения
Тип файла: rar aos.rar (57.5 Кб, 423 просмотров)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Dron AKA andy (6), raz (5), vallys (2), virhundo (1).
Старый 10.10.2008, 11:19   #59  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
AndyD, респект!
__________________
Андрей.
Старый 01.12.2008, 20:10   #60  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Что то у меня не правильно работает обработка статуса при стопе:

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
Пока идёт цикл остановки ("Stopping ..." в АОС утилите).. он у меня возвращает как уже остановленный... поэтому при копировании файлов у меня ошибка - аои занят (я его удаляю..)

Это так и должно быть?
Спасибо за утилитку!
Теги
aos, ax3.0, download, faq, администрирование, законченный пример

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
daxis: Troubleshooting blocked SPIDS in AOS Blog bot DAX Blogs 0 01.04.2009 18:05
Arijit Basu: AX 4 AOS Basics: [Level 100] Blog bot DAX Blogs 0 18.11.2007 14:30
DynamicsTech: What's New in Dynamics Ax 4.0 AOS? Blog bot DAX Blogs 0 12.04.2007 11:50
axaptapedia: Control AOS from command line Blog bot DAX Blogs 0 09.03.2007 14:50
Топология AOS'ов Sequel DAX: Администрирование 9 03.05.2006 18:37

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:45.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.