call main()
sub main()
Dim scmd
Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
createobject("wscript.Shell").run scmd,0,false
end sub
それは私にエラーを与えます:
Object required: '[string: "c:\windows\system32\"]' Code 800A01A8
更新
明確ではないので、_
Object Required
_の問題はこの行が原因であると指摘するのが最善です_Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
_これは、オブジェクトが期待されているが、それを文字列に割り当てているためです。
Set
を削除すると、コードは機能します( Ekkehard.Horner が 指摘されているように )。以下は私の状況の解釈です。最初にコードを見ると、_
WScript.Shell
_オブジェクトのインスタンス化と.Run()
メソッドのコマンドラインが混在しているように見えました。コードを分解し、再配置して元に戻すのは、私の最初の試みでした。
元の回答
_Set scmd
_は_WScript.Shell
_をインスタンス化する必要があります( Ekkehard.Horner が示すように、1回限りの参照にはServer.CreateObject("WScript.Shell").Run
を使用できますが、お勧めしませんそれ)。
.Run()
は、インスタンス化されたscmd
オブジェクトによって実行され、実行するコマンドラインを渡す必要があります。
これは、一部の変数の名前を変更した例です(scmd
からcmd
など)。
_Call main()
Sub main()
'Renamed variables to cmd is your object and cmdline is your file path.
Dim cmd, cmdline
'Instantiate WshShell object
Set cmd = Server.Createobject("WScript.Shell")
'Set cmdline variable to file path
cmdline = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
'Execute Run and return immediately
Call cmd.Run(cmdline, 0, False)
End Sub
_
考慮事項
ClassicでWScript.Shellを使用する場合ASP=実行可能ファイルを実行するために、考慮すべき点がいくつかあります。
Runコマンドは、現在のアプリケーションプールIDを使用して実行されます。
Runは、クライアント(サーバー側)ではなくサーバー上で実行可能ファイルを実行します。
なので
>> WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
>>
E:\trials\SoTrials\answers\trials\AlgoTaBu\SuSo\wsf
「Your Set scmd
はWScript.Shellをインスタンス化する必要がある」という規則や法律はまったくありません。実行するコマンドを文字列変数scmd(またはおそらくより優れたsCmd)に入れ、1回だけ使用される値の変数を作成しないことをお勧めします。
改訂版(愚かなセットを除いたもの):
call main()
sub main()
Dim scmd
scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
createobject("wscript.Shell").run scmd,0,false
end sub
lankymartのバージョンと同じように動作します。
すべてを綴るには:
"site:stackoverflow.com vbscript "object required" Set"
の結果は1500ヒットになります。これらのヒットの多くが"Set x = 'non-object'
の失敗に関係していなくても、明らかに多すぎます。これらのIEDを説明/言い訳するには、BASICが石器時代の言語であると考える必要があります。"Set x = 'non-object'
の間違いに2回驚かされる可能性があります。それが3回(またはそれ以上)発生する場合、彼/彼女は恥ずかしいはずです(そしてそれについて沈黙してください)。とりわけ、その問題はこのサイトを汚染するべきではありません。wtf
Set x = " ---- stop or be damned!!!
Set x = obj.getNumber() + 4 ---- oh no!!!