2009-08-11 168 views
4

IIS 6个及以上附带一个名为ADSUTIL.VBS实用脚本:如何找到C: Inetpub AdminScripts ADSUTIL.VBS的相对路径?

Adsutil.vbs的是IIS管理 工具,它使用的Microsoft Visual Basic脚本版(VBScript) 与Active Directory服务 接口(ADSI)操作 IIS配置。这个脚本应该使用安装在Windows Script Host中的CScript(即 )运行 。

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

我想从InstallShield项目中调用此工具,以便对IIS进行一些配置更改。我很好奇,如果它要么法律进行重新分配脚本(还有就是它的源代码里面没有法律措辞),或简单地通过启动命令:

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

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

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

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

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

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

回答

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作为安装的一部分 - 如果您不需要使用ADSUTIL.VBS(相对)路径,则无需使用它。

3

我最近碰到类似的问题,并决定只重写一小段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
+0

我想我会采取诱饵,然后去那条路线(写我自己的VBScript并分发)。我会发表我自己的回答,并赞扬你的建议。 – 2009-08-13 15:00:36