Как найти относительный путь к C: \ Inetpub \ AdminScripts \ ADSUTIL.VBS? - PullRequest
4 голосов
/ 12 августа 2009

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

Adsutil.vbs - администрация IIS утилита, которая использует Microsoft Visual Базовое издание сценариев (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 ]

3 голосов
/ 13 августа 2009

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

Option Explicit

Dim IIsObject
Set IIsObject = GetObject("IIS://LocalHost/W3SVC/AppPools/TestPool")
IIsObject.Put "ManagedPipelineMode", 1
IIsObject.Setinfo
IIsObject.Put "Enable32BitAppOnWin64", CBool("True")
IIsObject.Setinfo
1 голос
/ 13 августа 2009

Я работал над ответом 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 как часть установки - (относительный) путь к нему не имеет значения, если вам не нужно его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...