Нужно написать программное управление(создание сайтов, виртуальных директорий) IIS. Как я понял это можно сделать с помощью ADSI. Только вот все примеры, которые я нашел написаны на скриптах(VBScript, JScript). Каким образом можно переделать эти скрипты в сишный код или просто писать на С, используя ADSI?
Помогите, очень нужно!
Здравствуйте, moon, Вы писали:
M>Нужно написать программное управление(создание сайтов, виртуальных директорий) IIS. Как я понял это можно сделать с помощью ADSI. Только вот все примеры, которые я нашел написаны на скриптах(VBScript, JScript). Каким образом можно переделать эти скрипты в сишный код или просто писать на С, используя ADSI? M>Помогите, очень нужно!
Здравствуйте, moon, Вы писали:
M>Да, я помню этот пример. Но он использует чисто COM, а мне нужно ADSI.
В InnoSetup еще есть.
Там скрипт а-ля Дельфи.
Там, по моему как раз ADSI используется
Здравствуйте, moon, Вы писали:
M>Нужно написать программное управление(создание сайтов, виртуальных директорий) IIS. Как я понял это можно сделать с помощью ADSI. Только вот все примеры, которые я нашел написаны на скриптах(VBScript, JScript). Каким образом можно переделать эти скрипты в сишный код или просто писать на С, используя ADSI? M>Помогите, очень нужно!
Вот небольшой пример (VC 7.1):
// ADSITest.cpp : Defines the entry point for the console application.
//
Здравствуйте, moon, Вы писали:
M>Здравствуйте, __zve, Вы писали:
___>>Вот небольшой пример (VC 7.1):
M> Жаль, что не на VC 6.0, т.к. именно ее я использую. В VC 7 все по-другому((
// ADSITestVC6.cpp : Defines the entry point for the console application.
//
Вот это я скомпилировал и запустил на VC 6.0:
BTW: Чтобы собралось надо добавить в Project->Settings->Link->Object Library/Modules
дополнительно две либы: adsiid.lib activeds.lib
#include "stdafx.h"
#include <comdef.h>
#include <activeds.h>
#include <tchar.h>
_COM_SMARTPTR_TYPEDEF(IADs, IID_IADs);
int main(int argc, char* argv[])
{
CoInitialize(0);
try
{
_tprintf(_T("Updating default web site ...\n"));
Здравствуйте, moon, Вы писали:
M>Здравствуйте, __zve, Вы писали:
__>>Вот это я скомпилировал и запустил на VC 6.0:
M>Да, работает... а есть еще подобные примеры?
А какие конкретно действия через ADSI Вас интересуют?
Дело в том что я написал этот пример не зная что Вы собственно собираетесь делать.
С ADSI для IIS — а все просто, В нем сайты и виртуальные директории лежат в виде дерева.
У каждого элемента дерева есть тип (objectClass) и набор аттрибутов.
Для доступа к элементу дерева служит интерфейс IADs
при помощи него можно менять значения аттрибутов.
Пример как это делать приведен в моей программе выше.
Для создания/удаления/перчисления дочерних элементов используется интерфейс IADsContainer
который можно получить у обьекта IADs через QueryInterface.
Описание элементов и их аттрибутов должно лежать в где-то в MSDN
в принципе Вы сами можете посмотреть на это дерево используюя программу ADsVw.exe. Она должна поставляться с Platform SDK.
Здравствуйте, __zve, Вы писали:
__>А какие конкретно действия через ADSI Вас интересуют?
Мне нужно создать FTP сайт и несколько виртуальных директорий в нем. Также, помимо IIS, хотелось бы создать парочку пользоваетлей и групп на серваке... что-то похожее я нашел в msdn, но дело в том, что там работа осуществляется с доменом, а мне нужна рабочая группа... Собственно, в этом состоит еще одна проблема: мне нужно определить, доменная структура или групповая и далее уже кодить соответственно. У Вас есть какие-то соображения на эту тему?
Здравствуйте, moon, Вы писали:
M>Здравствуйте, __zve, Вы писали:
__>>А какие конкретно действия через ADSI Вас интересуют?
M>Мне нужно создать FTP сайт и несколько виртуальных директорий в нем. Также, помимо IIS, хотелось бы создать парочку пользоваетлей и групп на серваке... что-то похожее я нашел в msdn, но дело в том, что там работа осуществляется с доменом, а мне нужна рабочая группа... Собственно, в этом состоит еще одна проблема: мне нужно определить, доменная структура или групповая и далее уже кодить соответственно. У Вас есть какие-то соображения на эту тему?
Создавать пользователей в рабочей группе тоже можно через ADSI.
Для этого используеся так называемый WinNT провайдер.
Здравствуйте, __zve, Вы писали:
__>Создавать пользователей в рабочей группе тоже можно через ADSI. __>Для этого используеся так называемый WinNT провайдер.
Спасибо за помощь! Правда возникли еще некоторые проблемы... Теперь мне не удается поменять аттрибуты пользователя, которого я создаю, в рабочей группе.
Вопрос теперь в том, как мне править свойства пользователя. Есть подозрения, что этого не позволяет делать WinNT provider. У Вас есть какие-лиюо идеи?
Заранее благодарен!
Здравствуйте, moon, Вы писали:
M> Вопрос теперь в том, как мне править свойства пользователя. Есть подозрения, что этого не позволяет делать WinNT provider. У Вас есть какие-лиюо идеи? M>Заранее благодарен!
С той проблемой я кое-как разобрался... Теперь появилась другая: как определить доменная или групповая структура у локалки? В приниципе, можно просто прверять при доступе к объектам, вернул ли ошибку метод или нет... и далее использовать др. провайдер, но хотелось бы нормальное решение этой задачи.
Здравствуйте, moon, Вы писали:
M>Здравствуйте, __zve, Вы писали:
__>>Какие конкретно атрибуты вас интересуют? __>>Какую ошибку возвращает ADSI?
M> С той проблемой я кое-как разобрался... Теперь появилась другая: как определить доменная или групповая структура у локалки? В приниципе, можно просто прверять при доступе к объектам, вернул ли ошибку метод или нет... и далее использовать др. провайдер, но хотелось бы нормальное решение этой задачи.
Спасибо, разбираемся...
Еще тут возник вопросец
Нужно создать пользователя и группу на локальной машине с AD. Т.е проблема в том, что надо получить dn контейнера users(при этом до этого получив домен, имя компа и т.д. для adspath) и groups. Это я не знаю как сделать... ТОчнее знаю, но не уверен, что правильно(я делаю это через rootDSE, получая configurationNamingContext) Дальше возникаю проблемы: к какому контейнеру обращаться при создании групп и пользователей и где находятся польз "Адмнистратор" и его группа и т.д.
Заранеее спасибо!!!
Здравствуйте, moon, Вы писали:
M>Здравствуйте, __zve, Вы писали:
__>>Вот, может помочь. __>>http://support.microsoft.com/default.aspx?scid=kb;en-us;179891
M>Спасибо, разбираемся... M>Еще тут возник вопросец M>Нужно создать пользователя и группу на локальной машине с AD. Т.е проблема в том, что надо получить dn контейнера users(при этом до этого получив домен, имя компа и т.д. для adspath) и groups. Это я не знаю как сделать... ТОчнее знаю, но не уверен, что правильно(я делаю это через rootDSE, получая configurationNamingContext) Дальше возникаю проблемы: к какому контейнеру обращаться при создании групп и пользователей и где находятся польз "Адмнистратор" и его группа и т.д. M> Заранеее спасибо!!!
Администратор обычно находится в контейнере Users группа "Administrators" в контейнете Builin
Domain Admins в "Users" Но суть в том что эти пользоваетли или группы могут быть легко перенесены администратором куда угодно.
Я думаю вам либо надо давать пользователям выбирать самим где создать Ваши обьекты при помощи функции DSBrowseForContainer или
всегда создавать в "Users"
Здравствуйте, __zve, Вы писали:
__>Администратор обычно находится в контейнере Users группа "Administrators" в контейнете Builin __>Domain Admins в "Users" Но суть в том что эти пользоваетли или группы могут быть легко перенесены администратором куда угодно.
__>Я думаю вам либо надо давать пользователям выбирать самим где создать Ваши обьекты при помощи функции DSBrowseForContainer или __>всегда создавать в "Users"
Да, своих пользователей и группы я буду создавать в заранее определенном контейнере(Users). Просто мне нужно также добавлять своего пользователя к группе "Administrators", а в свою группу вносить пользователя "Administrator". Т.к. они (обьекты) могут быть перемещены куда-угодно, то тогда должна быть какая-то функция или const, определяющая путь к ним(что-то типа wellknownobjects). Вы случайно ее не знаете?
Здравствуйте, moon, Вы писали:
M>Здравствуйте, __zve, Вы писали:
__>>Администратор обычно находится в контейнере Users группа "Administrators" в контейнете Builin __>>Domain Admins в "Users" Но суть в том что эти пользоваетли или группы могут быть легко перенесены администратором куда угодно.
__>>Я думаю вам либо надо давать пользователям выбирать самим где создать Ваши обьекты при помощи функции DSBrowseForContainer или __>>всегда создавать в "Users"
M> Да, своих пользователей и группы я буду создавать в заранее определенном контейнере(Users). Просто мне нужно также добавлять своего пользователя к группе "Administrators", а в свою группу вносить пользователя "Administrator". Т.к. они (обьекты) могут быть перемещены куда-угодно, то тогда должна быть какая-то функция или const, определяющая путь к ним(что-то типа wellknownobjects). Вы случайно ее не знаете?