Как найти относительный путь к 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