Лицензирование и IClassFactory2
Интерфейс IClassFactory в объекте класса предоставляет базовый механизм создания объектов COM. С помощью IClassFactory сервер может управлять созданием объектов на компьютере. Реализация метода IClassFactory::CreateInstance может разрешить или запретить создание объектов на основе наличия лицензии компьютера. Лицензия на компьютер является частью информации, отдельной от приложения, которое существует на компьютере, чтобы указать, что программное обеспечение было установлено из допустимого источника, например диски установки поставщика. Если лицензия компьютера не существует, сервер может запретить создание объекта. Лицензирование компьютеров предотвращает пиратство в тех случаях, когда пользователь пытается скопировать программное обеспечение с одного компьютера на другой, так как данные лицензии не копируются с программным обеспечением и компьютер, получающий копию, не лицензируется.
Однако в отрасли программного обеспечения компонентов поставщики нуждаются в более тонком уровне контроля над лицензированием. Помимо управления лицензиями на компьютер, поставщику необходимо разрешить некоторым клиентам создавать объект компонента, запрещая другим клиентам ту же возможность. Для этого требуется, чтобы клиентское приложение получил ключ лицензии от компонента, пока клиентское приложение по-прежнему находится в процессе разработки. Клиентское приложение использует ключ лицензии во время выполнения для создания объектов на нелицензированного компьютера.
Например, если поставщик предоставляет библиотеку элементов управления разработчикам, разработчик, который приобретает библиотеку, будет иметь полную лицензию на компьютер, позволяя создавать объекты на компьютере разработки. Затем разработчик может создать клиентское приложение на лицензированном компьютере, включив один или несколько элементов управления. Когда полученное клиентское приложение выполняется на другом компьютере, элементы управления, используемые в клиентском приложении, должны быть созданы на другом компьютере, даже если этот компьютер не имеет лицензии на компьютер для элементов управления от исходного поставщика.
Интерфейс IClassFactory2 предоставляет этот уровень управления. Чтобы разрешить лицензирование на основе ключей для любого данного компонента, вы реализуете IClassFactory2 в объекте фабрики классов для этого компонента. IClassFactory2является производным от IClassFactory, поэтому путем реализации IClassFactory2 объект фабрики классов соответствует основным требованиям COM.
Чтобы включить лицензированный компонент в клиентское приложение, используйте следующие методы в IClassFactory2:
- Метод GetLicInfo заполняет структуру LICINFO сведениями, описывающими поведение лицензирования фабрики классов. Например, фабрика классов может предоставлять ключи лицензий для лицензирования во время выполнения, если член fRunTimeKeyAvail имеет значение TRUE.
- Метод RequestLicKey предоставляет ключ лицензии для компонента. Лицензия на компьютер должна быть доступна, когда клиент вызывает этот метод.
- Метод CreateInstanceLic создает экземпляр лицензированного компонента, если допустимый параметр ключа лицензии (BSTRÂ bstrKey).
Примечание.
В сведениях о типе компонент использует атрибут, лицензированный для маркировки сокласса, поддерживающего лицензирование через IClassFactory2.
Во-первых, вам нужен отдельный инструмент разработки, который также является клиентом лицензированного компонента. Цель этого средства — получить ключ лицензии во время выполнения и сохранить его в клиентском приложении. Это средство выполняется только на компьютере, который обладает лицензией компьютера для компонента. Средство вызывает методы GetLicInfo и RequestLicKey , чтобы получить ключ лицензии во время выполнения, а затем сохраняет ключ лицензии в клиентском приложении. Например, средство разработки может создать файл заголовка (H), содержащий ключ лицензии BSTR, а затем включить этот H-файл в клиентское приложение.
Чтобы создать экземпляр компонента в клиентском приложении, сначала попробуйте создать экземпляр объекта непосредственно с помощью IClassFactory::CreateInstance. При успешном завершении CreateInstance второй компьютер лицензируется для компонента и объектов, которые можно создать. Если CreateInstance завершается ошибкой с CLASS_E_NOTLICENSED возвращаемого кода, единственным способом создания объекта является передача ключа во время выполнения методу CreateInstanceLic. CreateInstanceLic проверяет ключ и создает объект, если ключ действителен.
Таким образом, приложение, созданное с помощью компонентов (таких как элементы управления), может выполняться на компьютере, у котором нет другой лицензии, — только клиентское приложение, содержащее лицензию во время выполнения, разрешено создавать объекты компонентов, которые имеются в вопросе.
Интерфейс IClassFactory2 поддерживает гибкость в схемах лицензирования. Например, разработчик сервера может шифровать ключи лицензии в компоненте для дополнительной безопасности. Реализующие серверы также могут включать или отключать уровни функциональности в своих объектах, предоставляя разные ключи лицензии для различных функций. Например, один ключ может разрешить базовый уровень функциональности, а другой — базовую и расширенную функциональность и т. д.
См. также