2009-08-11 10 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