如何找到 C:\Inetpub\AdminScripts\ADSUTIL.VBS 的相对路径?
-
13-09-2019 - |
题
IIS 6 及更早版本附带了一个名为的实用程序脚本 广告应用程序:
ADSUTIL.VBS是IIS管理实用程序,它使用Microsoft Visual Basic Scripting Edition(VBScript)和Active Directory Service接口(ADSI)来操纵IIS配置。该脚本应使用Windows脚本主机安装的CScript运行。
换句话说,这个工具可以让你改变 IIS元数据库 从命令行以编程方式设置。
我想从 InstallShield 项目调用此工具,以便对 IIS 进行一些配置更改。我很好奇重新分发脚本是否合法(源代码中没有合法的措辞)或简单地通过以下方式启动命令:
CSCRIPT %SYSTEMDRIVE%\Inetpub\AdminScripts\adsutil.vbs
并希望该脚本存在于磁盘上的该位置。
所以我的问题是 - 即使计算机上的某些其他网站(inetpub 根)位于非系统驱动器上,它是否始终存在于上面的路径中?似乎所有引用 ADSUTIL 工具的 MSDN 和其他 Microsoft 知识库文章都是通过使用上面的 %SYSTEMDRIVE% 路径来实现的。
我至少看到 另一种尝试解决这个问题 通过将 cscript.exe 和 adsutil.vbs 与其 InstallShield 项目一起分发。
也许有注册表项或其他方法来获取 Inetpub\AdminScripts 路径的位置?
也许我应该写一个 更改值的 C# 应用程序 或者 我自己的 VBScript 并使用我自己的小应用程序进行分发?
解决方案 2
我在工作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作为安装的一部分 - 的(相对)的路径是不相关的,如果你不需要使用它
其他提示
最近我遇到类似的问题,并决定只返工VBScript中的一个小一点的自定义操作在MSI安装程序使用。它可以采取一点要弄清楚的ADSUTIL.VBS如何做事情的核心,但它是很好deently writen。例如,我需要一个应用程序池切换到经典的反而集成模式和明确地将其设置为在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