Как найти относительный путь к C:\Inetpub\AdminScripts\ADSUTIL.VBS?

IIS 6 и более ранние версии поставляются со служебным скриптом ADSUTIL.VBS:

Adsutil.vbs - это утилита администрирования IIS, которая использует Microsoft Visual Basic Scripting Edition (VBScript) с интерфейсами служб Active Directory (ADSI) для управления конфигурацией IIS. Этот скрипт должен быть запущен с использованием CScript, который устанавливается вместе с Windows Script Host.

Другими словами, этот инструмент позволяет программно изменять параметры метабазы ​​IIS из командной строки.

Я хотел бы вызвать этот инструмент из проекта InstallShield, чтобы внести некоторые изменения в конфигурацию IIS. Мне любопытно, будет ли законным распространять сценарий (нет юридической формулировки внутри исходного кода) или просто запустить команду через:

CSCRIPT %SYSTEMDRIVE%\Inetpub\AdminScripts\adsutil.vbs

и надеюсь, что сценарий существует на диске в этом месте.

Итак, мой вопрос - будет ли он всегда существовать по указанному выше пути, даже если некоторые другие веб-сайты (корни inetpub) на компьютере расположены на несистемном диске? Кажется, что все статьи MSDN и другие статьи Microsoft KB, которые ссылаются на инструмент ADSUTIL, делают это, используя путь%SYSTEMDRIVE% выше.

Я вижу, что, по крайней мере, еще одна попытка справиться с этим путем распространения cscript.exe и adsutil.vbs с их проектами InstallShield.

Возможно, существует раздел реестра или другой способ получения местоположения пути Inetpub\AdminScripts?

Может быть, я должен просто написать приложение на C#, которое изменяет значение или мой собственный VBScript, и вместо этого распространять его с моим собственным небольшим приложением?

2 ответа

Решение

Я работал в ответ JShumaker, чтобы решить эту проблему. Лучшим маршрутом является следующая функция InstallScript, которую я вызываю для запуска пакетного скрипта:

prototype SetIISValues();   
function SetIISValues()  
    string szProgram, szCmd;
begin                              
    szProgram = TARGETDIR + "SetIISValues.bat";
    szCmd = "";  
    LaunchAppAndWait (szProgram, szCmd, LAAW_OPTION_WAIT);
end; 

Пакетный скрипт вызывает это:

@echo off
cscript.exe SetIISValues.vbs

И VBScript выглядит так:

Option Explicit
Dim IIsObject
Set IIsObject = GetObject("IIS://localhost/w3svc/1")
IIsObject.Put "Name", "Value"
IIsObject.Setinfo

Такое действие избавляет от необходимости использовать ADSUTIL.VBS как часть установки - (относительный) путь к нему не имеет значения, если вам не нужно его использовать.

Недавно я столкнулся с подобной проблемой и решил просто переделать небольшой кусочек vbscript для использования в настраиваемом действии в установщике msi. Чтобы понять суть того, как adsutil.vbs делает что-то, может потребоваться некоторое время, но он хорошо написан. Например, мне нужно было переключить пул приложений в классический, а не в интегрированный режим и явно настроить его на работу в 32-разрядном режиме в 64-разрядных окнах, в дистиллированном виде это привело к следующему:

Вариант Явный

Dim IIsObject
Set IIsObject = GetObject("IIS://LocalHost/W3SVC/AppPools/TestPool")
IIsObject.Put "ManagedPipelineMode", 1
IIsObject.Setinfo
IIsObject.Put "Enable32BitAppOnWin64", CBool ​​("True")
IIsObject.Setinfo
Другие вопросы по тегам