IIS: Programmatic Administration
От: iShadow  
Дата: 07.04.03 13:03
Оценка:
Пытаюсь рулить IIS-ом (IIS5.x, Win2k server) с помощью AdminBaseObject.

1) Есть ли у кого пример "Virtual Directory Creator" ? Ни в msdn, ни mssdk, ни в iis samples я его не нашел.
2) Где именно в metabase храняться проперти, задаваемые при создании, к примеру, виртуальной диры(локальный путь, например)?
Вот собственные ключи из метабэйз —

Enumerating date in path: /LM/W3SVC/1/Root/zzz
type: [1] id: [44b] []
type: [2] id: [3ea] [IIsWebVirtualDir]

Enumerating keys Path: /LM/W3SVC/1/Root/zzz

Через ADSI рулится с помощью IIsWebVirtualDir, "3ea" это его key type.
Как до него добраться с помощью AdminBaseObject?
Re: IIS: Programmatic Administration
От: Lexey Россия  
Дата: 07.04.03 13:14
Оценка: 9 (1)
Здравствуйте, iShadow, Вы писали:

S>Пытаюсь рулить IIS-ом (IIS5.x, Win2k server) с помощью AdminBaseObject.


S>1) Есть ли у кого пример "Virtual Directory Creator" ? Ни в msdn, ни mssdk, ни в iis samples я его не нашел.


А нафига?

S>2) Где именно в metabase храняться проперти, задаваемые при создании, к примеру, виртуальной диры(локальный путь, например)?


Все проперти описаны в описании соответсвующего объекта (IIsVirtualDir) в описании объектов ADSI.

S>Вот собственные ключи из метабэйз —


S>Enumerating date in path: /LM/W3SVC/1/Root/zzz

S>type: [1] id: [44b] []
S>type: [2] id: [3ea] [IIsWebVirtualDir]

S>Enumerating keys Path: /LM/W3SVC/1/Root/zzz


S>Через ADSI рулится с помощью IIsWebVirtualDir, "3ea" это его key type.

S>Как до него добраться с помощью AdminBaseObject?

Создавать примерно так (обрати внимание на MD_KEY_TYPE):

METADATA_RECORD mdr;
MD_SET_DATA_RECORD(&mdr, MD_KEY_TYPE, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, 0x14, L"IIsFilter");
hr = pMSAdmin->SetData(hMetaData, pwszFilterName, &mdr);

Это пример для фильтра, но с виртуальным каталогом все ровно также.
Читать и того проще.
Re[2]: IIS: Programmatic Administration
От: iShadow  
Дата: 08.04.03 04:36
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Создавать примерно так (обрати внимание на MD_KEY_TYPE):

L>
L>METADATA_RECORD mdr;
L>MD_SET_DATA_RECORD(&mdr, MD_KEY_TYPE, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, 0x14, L"IIsFilter");
L>hr = pMSAdmin->SetData(hMetaData, pwszFilterName, &mdr);
L>

L>Это пример для фильтра, но с виртуальным каталогом все ровно также.


Классно, как установить/получить запись в метабейз я понял
Но хочется именно рулить объектом IIsVirtualDir(или IIsFilter, как у тебя). Как его создать/получить из metabase в C++ ?

Сорри за возможно туповатые вопросы, под винды раньше не писал
Re[3]: IIS: Programmatic Administration
От: iShadow  
Дата: 08.04.03 08:00
Оценка:
Здравствуйте, iShadow, Вы писали:

S>Но хочется именно рулить объектом IIsVirtualDir(или IIsFilter, как у тебя). Как его создать/получить из metabase в C++ ?


Через ADSI рулить получается, но хотелось бы делать подобное только при помощи ABO —


#include <iads.h>
#include <Adshlp.h>
#include <comdef.h>

bool CreateVirtualDir(LPCTSTR lpszVirtualDirName, LPCTSTR lpszDiskPath)
{
    IADsContainer* iContainer;
    IADs* iAds;
    /* to get the WebSever */
    if(ADsGetObject
(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)
&iContainer)==S_OK){
    //to get the default website
    iContainer->GetObject(_bstr_t("IIsWebServer"), _bstr_t
("1"),(IDispatch**)&iAds);
    if(iAds->QueryInterface(IID_IADsContainer,(void**)
&iContainer)==S_OK){
 //to get the default website directory
 iContainer->GetObject(_bstr_t
("IIsWebVirtualDir"),_bstr_t("Root"),(IDispatch**)&iAds);
 if(iAds->QueryInterface(IID_IADsContainer,(void**)
&iContainer)==S_OK){
 //if we get the virtual directory,we should delete it first
 iContainer->Delete(_bstr_t("IIsWebVirtualDir"),
_bstr_t(lpszVirtualDirName));
 //to create a virtual directory
 if(iContainer->Create(_bstr_t("IIsWebVirtualDir"),
_bstr_t(lpszVirtualDirName),(IDispatch**)&iAds)==S_OK){
  //to set the virtual directory's attribute
  iAds->Put(_bstr_t("AccessRead"),_variant_t
("True"));
  iAds->Put(_bstr_t("AccessWrite"),_variant_t
("True"));
  iAds->Put(_bstr_t("Path"),_variant_t
(lpszDiskPath));
  iAds->SetInfo();
  iAds->Release();
  iAds->Release();
  iContainer->Release();
  iContainer->Release();
  return TRUE;
 }
 else{
  iAds->Release();
  iAds->Release();
  iContainer->Release();
  iContainer->Release();
  return FALSE;
 }
    }
    else{
 iAds->Release();
 iContainer->Release();
    }
  }
else{
 iAds->Release();
} iContainer->Release();
} return FALSE;
}



Да, на Win2k en sp3 + IIS5.0 не создается экземпляр IMSAdminBase. На WinXP en sp1 + IIS5.1 — работает.

"ERROR: CreateInstance Failed! Error: 0x80070005 the example failed with 0x80070005"




    // Initialize COM
    hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
    if (FAILED(hr))
    {
    wprintf( L"ERROR: CoInitialize Failed! Error: 0x%08x\n", hr );
        goto exit;
   }

    hr = CoGetClassObject( CLSID_MSAdminBase, CLSCTX_SERVER, &csiMachineName,
                           IID_IClassFactory, (void**) &pClassFactory);
    if (FAILED(hr))
    {
        wprintf( L"ERROR: CoGetClassObject Failed! Error: 0x%08x\n", hr );
        goto exit;
    }

    hr = pClassFactory->CreateInstance(NULL, IID_IMSAdminBase, (void **) &pAdminBase);
    if (FAILED(hr))
    {
        wprintf( L"ERROR: CreateInstance Failed! Error: 0x%08x\n", hr );
        goto exit;
    }
Re[4]: IIS: Programmatic Administration
От: iShadow  
Дата: 08.04.03 08:19
Оценка:
Здравствуйте, iShadow, Вы писали:

S>Да, на Win2k en sp3 + IIS5.0 не создается экземпляр IMSAdminBase. На WinXP en sp1 + IIS5.1 — работает.

S>"ERROR: CreateInstance Failed! Error: 0x80070005 the example failed with 0x80070005"

сорри, это был мой косяк с именем хоста
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.