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 value或my own VBScript并使用我自己的小应用程序进行分发?
答案 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作为安装的一部分的需要 - 如果您不需要使用它,它的(相对)路径是无关紧要的。