如何找到C:\ Inetpub \ AdminScripts \ ADSUTIL.VBS的相对路径?

时间:2009-08-11 21:06:44

标签: iis iis-6 metabase installscript adsutil.vbs

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

  

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

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

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

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

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

所以我的问题是 - 即使机器上的某些其他网站(inetpub root)位于非系统驱动器上,它是否始终存在于上述路径中?似乎所有引用ADSUTIL工具的MSDN和其他Microsoft知识库文章都使用上面的%SYSTEMDRIVE%路径。

我通过在他们的InstallShield项目中分发cscript.exe和adsutil.vbs,至少看到one other attempt to deal with this

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

也许我应该写一个C# application that changes the valuemy own VBScript并使用我自己的小应用程序进行分发?

2 个答案:

答案 0 :(得分:3)

我最近遇到了类似的问题,并决定只修改一小部分vbscript,以便在msi安装程序中使用自定义操作。可能需要花一些时间来弄清楚adsutil.vbs如何处理事务的核心,但它的写作非常好。例如,我需要将应用程序池切换到Classic而不是Integrated模式,并在64位窗口上显式设置为以32位模式运行,以蒸馏形式生成:

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 :(得分:1)

我在JShumaker's answer工作以解决问题。最好的路径似乎是我调用以运行批处理脚本的以下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作为安装的一部分的需要 - 如果您不需要使用它,它的(相对)路径是无关紧要的。