C:\Inetpub\AdminScripts\ADSUTIL.VBS への相対パスを見つけるにはどうすればよいですか?
-
13-09-2019 - |
質問
IIS 6 以前には、と呼ばれるユーティリティ スクリプトが付属しています。 ADSUTIL.VBS:
adsutil.vbsは、IIS構成を操作するためにActive Directory Service Interfaces(ADSI)を備えたMicrosoft Visual Basic Scripting Edition(VBScript)を使用するIIS管理ユーティリティです。このスクリプトは、Windowsスクリプトホストでインストールされているcscriptを使用して実行する必要があります。
言い換えれば、このツールを使用すると、 IISメタベース コマンドラインからプログラムで設定を行います。
IIS の構成を変更するために、InstallShield プロジェクトからこのツールを呼び出したいと考えています。スクリプトを再配布するのが合法なのか(ソース内に合法的な文言はありません)、それとも単に次のようにコマンドを起動するのが合法なのか知りたいです。
CSCRIPT %SYSTEMDRIVE%\Inetpub\AdminScripts\adsutil.vbs
そしてスクリプトがディスク上のその場所に存在することを望みます。
それで私の質問は - マシン上の他の Web サイト (inetpub ルート) がシステム以外のドライブにある場合でも、そのパスには常に存在しますか?ADSUTIL ツールについて言及しているすべての MSDN およびその他の Microsoft KB 記事では、上記の %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 を使用する必要がなくなります。使用する必要がない場合、ADSUTIL.VBS への (相対) パスは無関係です。
他のヒント
最近同様の問題に遭遇したので、msi インストーラーのカスタム アクションで使用するために vbscript を少しだけ作り直すことにしました。adsutil.vbs の動作の核心を理解するには少し時間がかかるかもしれませんが、非常によく書かれています。たとえば、アプリケーション プールを統合モードではなくクラシックに切り替え、64 ビット Windows の場合は 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