Инструмент Developer для конфигурирования IIS6

Во-первых, ваше решение не может быть Excel UDF (пользовательская функция). В наших руководствах мы даем следующее определение: «UDF Excel используются для создания пользовательских функций в Excel, чтобы конечный пользователь мог использовать их в формулах». Я не возражаю, если вы предложите более точное определение :)

Это определение показывает, что UDF не может добавить кнопку в пользовательский интерфейс (я знаю, что XLL могут изменять пользовательский интерфейс CommandBar) или перехватывать сочетания клавиш, а также События Excel.

То есть ExcelDNA выходит за рамки, поскольку он предназначен для разработки надстроек XLL. То же самое относится к функциональности надстройки Express, нацеленной на Excel, поскольку она позволяет разрабатывать надстройки XLL и надстройки Excel Automation.

Поскольку вам нужно обрабатывать события Excel, ваше решение может быть автономным приложением, но существуют очевидные ограничения такого подхода. Единственный реальный способ - создать надстройку COM; это позволяет обрабатывать события Excel и добавлять пользовательские элементы в пользовательский интерфейс Excel. У вас есть три возможности:

  • VSTO
  • Надстройка Express (функция надстройки COM)
  • Общая надстройка (см. Соответствующий пункт в разделе «Новые». Диалог проекта в VS)

Если говорить о разработке надстройки Excel COM, то 3 вышеупомянутых инструмента предоставляют различные функции: визуальные дизайнеры, шимминг и т. Д. Но я не думаю, что они отличаются в скорость доступа к объектной модели Excel. Скажем, я не знаю (и не могу себе представить), почему получение COM-объекта из AppDomain по умолчанию должно отличаться от получения того же COM-объекта из другого AppDomain. Кстати, вы можете проверить, влияет ли шимминг на скорость работы, создав совместно используемую надстройку, а затем используя COM Shim Wizard для ее шиммирования.

Скорость II. Как я писал вам вчера: «Лучший способ ускорить чтение и запись в диапазон ячеек - это создать переменную типа Excel.Range, ссылающуюся на этот диапазон, а затем прочитать / записать массив из / в свойство Value переменной. " Но вопреки тому, что говорит Франческо, я не приписываю это ВСТО; это особенность объектной модели Excel.

Скорость III. Самые быстрые пользовательские функции Excel написаны на родном C ++, а не на любом языке .NET. Я не сравнивал скорость надстройки XLL, созданной ExcelDNA и Add-in Express; Я не думаю, что вы найдете здесь существенную разницу.

Подводя итог. Я убежден, что вы ошибаетесь: надстройки COM, основанные на надстройках Express, VSTO или Shared Add-in, должны читать и записывать ячейки Excel с одинаковой скоростью. Я буду рад (искренне), если кто-то опровергнет это утверждение.

Теперь о других ваших вопросах. VSTO не позволяет разрабатывать надстройку COM, поддерживающую Office 2000-2010. Требуется три разных кодовых базы и как минимум две версии Visual Studio для полной поддержки Office 2003-2010; вам нужно иметь крепкие нервы и часть удачи для развертывания надстройки на основе VSTO для Excel 2003. С помощью надстройки Express вы создаете надстройку COM для всех версий Office с единой кодовой базой; Надстройка Express предоставляет вам проект установки, который готов установить вашу надстройку в Excel 2000-2010 (32-разрядная и 64-разрядная версия); Развертывание ClickOnce также на борту.

VSTO превосходит Add-in Express в одной области: он позволяет создавать так называемые надстройки уровня документа. Представьте себе рабочую книгу или шаблон с некоторым кодом .NET позади него; Однако я не удивлюсь, если развертывание таких вещей станет кошмаром.

О событиях Excel. Все события Excel перечислены в MSDN, например, см. События Excel 2007

С уважением, из Беларуси (GMT + 2),

Андрей Смолин Руководитель надстройки Express Team

12
задан Marc Gravell 8 June 2009 в 19:40
поделиться

6 ответов

Я сразу могу придумать три варианта ...

  1. Оснастка Powershell.
  2. AdsUtil.vbs (находится в C: \ Inetpub \ AdminScripts by default) позволит вам записать эти задачи в пакетный файл, или вы даже можете вызвать его из PowerShell, если у вас нет времени инвестировать в изучение интерфейса WMI для IIS.
  3. Скрипт MSBuild. Наверное, сложнее настроить, но пакет MSBuild Extension Pack предоставляет некоторые задачи для управления IIS6 и IIS7 из сценария MSBuild.

Я думаю, что если бы мне это нужно было сделать, я бы использовал Powershell или удалил необходимость все вместе и создать базовую установку виртуальной машины, в которой уже были настроены все основы. Когда я закончу с тестированием, я просто откатываю жесткий диск и снова буду свободен.

11
ответ дан 2 December 2019 в 07:03
поделиться
4
ответ дан 2 December 2019 в 07:03
поделиться

Powershell подойдет. Если вы хотите избежать зависимостей, вы также можете сгенерировать скрипт для запуска с AdsUtil.vbs.

Вероятно, проще будет стандартизовать на IIS7, где все это хранится в файлах web.config, что значительно облегчит жизнь.

1
ответ дан 2 December 2019 в 07:03
поделиться

Вы можете посмотреть файлы конфигурации XML метабазы ​​для IIS и разрешить прямое редактирование.

1
ответ дан 2 December 2019 в 07:03
поделиться

Я немного опоздал на шоу, но я подумал, что этот сценарий PowerShell будет мне полезен. Имейте в виду, что я использую его только для локальной разработки, поэтому извиняюсь за магические числа.

AuthFlags = 4 - это интегрированная авторизация

Это не совсем соответствует требованиям Марка, но это хорошее начало.

Если вы загрузили Инструменты WMI , вы можете использовать их для изучения интерфейса WMI с метабазой IIS.

function CreateAppPool($poolName,$userName,$password)
{
    [wmiclass] $appPoolSettings = "root\MicrosoftIISv2:IISApplicationPoolSetting";
    $newPool = $appPoolSettings.CreateInstance();
    $newPool.Name = "W3SVC/AppPools/" + $poolName;
    $newPool.WAMUsername = $userName;
    $newPool.WAMUserPass = $password;
    $newPool.AppPoolIdentityType = 3;
    $newPool.Put();
    # Do it again if it fails as there is a bug with Powershell/WMI
    if (!$?)
    {
        $newPool.Put(); 
    }
}


function CreateWebsite($webSiteName, $path, $port, $appPoolName)
{
    [wmiclass] $bindingClass = 'root\MicrosoftIISv2:ServerBinding';
    $bindings = $bindingClass.CreateInstance();
    $bindings.Port = $port;
    $webService = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebService";
    $webSite = $webService.CreateNewSite($webSiteName, $bindings, $path);
    [int] $index = $webSite.ReturnValue.IndexOf("'") + 1;
    [int] $length = $webSite.ReturnValue.Length - $index - 1;
    [string] $websiteID = $webSite.ReturnValue.SubString($index, $length)  + "/root";
    $webVirtualDirSetting = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebVirtualDirSetting" | Where-Object {$_.Name -eq $websiteID};
    $webVirtualDirSetting.AppFriendlyName = $webSiteName;
    $webVirtualDirSetting.AppPoolId = $appPoolName;
    $webVirtualDirSetting.AccessFlags = 517;
    $webVirtualDirSetting.AuthFlags = 4;
    $webVirtualDirSetting.Put();

    #Switch the Website to .NET 2.0
    C:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -sn W3SVC/
}

$webSiteName = "MyWebsiteName";
$webSitePath = "C:\MyWebsitePath";
$webSitePort = "9001";
$appPoolName = "MyWebsitePool";
$appPoolIdentity = "MYDESKTOP\MyWebsiteIdentity";
$appPoolPassword = "MyWebsitePassword"; 

CreateAppPool $appPoolName $appPoolIdentity $appPoolPassword
CreateWebsite $webSiteName $webSitePath $webSitePort $appPoolName
4
ответ дан 2 December 2019 в 07:03
поделиться

может помочь, а может и не помочь, но посмотрите http://rprieto.github.com/psDeploy/iis-6-cmdlets.html

1
ответ дан 2 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: