Я унаследовал некоторый код от некоторых коллег, которые мне поручено обновить. У меня очень мало опыта написания кода до появления .NET, поэтому я не очень знаком с такими вещами, как COM и ActiveX.
Вот как выглядит код:
[Guid("0B84013E-A3D3-1f2f-5E61-4646813BF5DE")]
public interface IGenerator
{
string GenerateFileName();
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("D499F7A6F-BAC2-4604-BF12-10481C07E924")]
public class Generator : IGenerator
{
public string GenerateFileName() {
// implementation details not important
return "abcdef.xyz";
}
}
Проект создает файл dll, который зарегистрирован на машине с помощью regasm:
regasm Generator.dll /tlb /codebase
У нас есть веб-сайт, который использует код так:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script type="text/javascript" language="javascript">
function Frob() {
var as = new ActiveXObject("Test.Generator");
var fn = as.GenerateFileName();
}
</script>
...
<img src="foo.jpg" onclick="Frob()" />
Проблема с кодом заключается в том, что:
1) не подписано
2) Они должны зарегистрировать сборку самостоятельно, используя regasm
Мне было поручено подписать сборку и упаковать ее в CAB-файл, разместив на веб-сайте, чтобы пользователю было предложено установить его таким образом.
Уроки, которые я видел до сих пор, говорят вам упаковать его в CAB-файл и поместить его в тег OBJECT на сайте:
http://msdn.microsoft.com/en-us/library/aa751974(v=vs.85).aspx
с сайта:
Microsoft Internet Explorer 4.0 или более поздние версии обрабатывают объект OBJECT и атрибут CODEBASE следующим образом.
Анализирует объект OBJECT и ищет атрибут CODEBASE.
Если атрибут CODEBASE отсутствует
или предшествует URL-объекту
Индексный сервер в
CodeBaseSearchPath, этот индекс
используется для извлечения файла.
Находит файл .cab, определенный атрибутом CODEBASE.
Расширяет файлы, найденные в CAB-файле.
Копирует расширенные файлы на компьютер пользователя (каталог по умолчанию \ windows \ occache).
Регистрация объектов и / или файлов, требующих регистрации.
Вызывает объектную модель компонента
(COM) Функция CoCreateInstance для
создать экземпляр указанного
объект.
У меня есть несколько проблем / вопросов:
У моего элемента управления нет пользовательского интерфейса. Имеет ли смысл по-прежнему помещать его в тег OBJECT?
Я попытался поместить его в тег объекта и запустить веб-сайт, и он не предлагал мне что-либо установить. Как мне заставить это работать?