Я написал утилиту в Delphi 5.0 для отключения прерванных соединений в ADS v6.2 с помощью AdsMgKillUser , которая хорошо работала в течение многих лет на сервере клиента. Заказчик недавно обновился до ADS v9.1 и 2008 Server: старая утилита перестала работать. Обновлена программа до Delphi 7 , ADS v9.1 TDataSet и ACE. Используя код, почти дословно скопированный из раздела справки AdsMgKillUser, при тестировании на сервере ADS 10.1 код не может отключить пользователя (но я получаю код возврата AE_SUCCESS при вызове AdsMgKillUser). ARC32 v9.1 отлично работает в том же тесте, чтобы отключить пользователя ADS 10.i.
Фрагмент кода:
// program resides on same server as ADS
ulRetVal := ACE.AdsMgConnect( PAnsiChar(appdir), nil, nil, @hMgmtHandle );
if ( ulRetVal <> AE_SUCCESS ) then
begin
Application.MessageBox( 'Could not connect to server.', 'Connection Error', ID_OK );
exit;
end;
// strUserConn assigned connection name in format domain\username e.g. "MYSERVER\Fred"
ulRetVal := ACE.AdsMgKillUser( hMgmtHandle, PAnsiChar(strUserOrConn), 0);
if ( ulRetVal <> AE_SUCCESS )
then Application.MessageBox( 'User not disconnected.','Error', ID_OK )
else Application.MessageBox( 'User disconnected OK','Information', ID_OK );
Что я делаю не так?