4

IIS 6 和更早版本附带一个名为ADSUTIL.VBS的实用程序脚本:

Adsutil.vbs 是一个 IIS 管理实用程序,它使用 Microsoft Visual Basic 脚本版 (VBScript) 和 Active Directory 服务接口 (ADSI) 来操作 IIS 配置。该脚本应使用随 Windows Script Host 一起安装的 CScript 运行。

换句话说,此工具允许您从命令行以编程方式更改IIS 元数据库设置。

我想从 InstallShield 项目中调用此工具,以便对 IIS 进行一些配置更改。我很好奇重新分发脚本是否合法(源代码中没有合法的措辞)或简单地通过以下方式启动命令:

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

并希望该脚本存在于该位置的磁盘上。

所以我的问题是- 即使机器上的其他一些网站(inetpub 根目录)位于非系统驱动器上,它是否总是存在于上述路径中?似乎所有引用 ADSUTIL 工具的 MSDN 和其他 Microsoft KB 文章都是通过使用上面的 %SYSTEMDRIVE% 路径来实现的。

我看到至少还有其他尝试通过将 cscript.exe 和 adsutil.vbs 与他们的 InstallShield 项目一起分发来解决这个问题。

也许有一个注册表项或其他方法来获取 Inetpub\AdminScripts 路径的位置?

也许我应该只编写一个C# 应用程序来更改值我自己的 VBScript,然后用我自己的小应用程序分发?

4

2 回答 2

3

我最近遇到了一个类似的问题,并决定只修改一小部分 vbscript 以用于 msi 安装程序中的自定义操作。弄清楚 adsutil.vbs 是如何做事的核心可能需要一点时间,但它确实写得很好。例如,我需要将应用程序池切换到经典模式而不是集成模式,并在 64 位窗口上显式将其设置为在 32 位模式下运行,以蒸馏形式,这导致了以下结果:

选项显式

暗淡 IIsObject
设置 IIsObject = GetObject("IIS://LocalHost/W3SVC/AppPools/TestPool")
IIsObject.Put "ManagedPipelineMode", 1
IIsObject.Setinfo
IIsObject.Put "Enable32BitAppOnWin64", CBool​​("True")
IIsObject.Setinfo
于 2009-08-12T22:16:30.760 回答
1

我在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 的需要 - 如果您不需要使用它,则它的(相对)路径是无关紧要的。

于 2009-08-13T14:54:22.737 回答