私が作成したVBScriptは素晴らしいです!それは私がWindowsの私は私のInno Setupのスクリプトでそれを持っているいくつかの理由VBScriptはコマンドプロンプトから実行したときにうまく動作しますが、Innoセットアップでは実行されません。
cscript.exe "C:\SetupTempPath\MyScript.vbs" "First Param" 1234 "Third Param"
10でコマンドラインから実行するとき、私は完全にそれを必要なすべてを...し
Filename: "{sys}\cscript.exe"; \
Parameters: """{tmp}\MyScript.vbs"" ""{code:GetStringValue}"" {#PORT} ""{#NAME}"""; \
Description: "Set port to {#PORT}."; \
StatusMsg: "Setting the port to {#PORT}."; \
Tasks: setPortNumber; \
Check: SetTcpPort({#PORT});
私はデバッグモードでセットアップを実行すると、それはあなたが見ることができるように、次の...
[12:37:45.377] -- Run entry --
[12:37:45.378] Run as: Current user
[12:37:45.380] Type: Exec
[12:37:45.381] Filename: C:\WINDOWS\system32\cscript.exe
[12:37:45.425] Parameters: "C:\SetupTempPath\MyScript.vbs" "First Param" 1234 "Third Param"
[12:38:04.987] Process exit code: 0
[12:38:04.995] Need to restart Windows? No
[12:38:06.944] Deinitializing Setup.
[12:38:06.997] *** Setup exit code: 0
だからすべては、コード関数から正常に解決だけでなく、dはInno Setupの定数(定義)取得された私を示していいいえ。
VBScriptにMsgBoxの行を入れてステータスをチェックし、エラーが発生したときを確認しました。私は...それは(のみInno Setupのから実行されたとき)ので、私はここにいくつかの誤り制御を占めるとするスクリプトを調整した結果であるとの問題を持っていることのVBScriptの一部を見つけることになった
Set wmiComputer = GetObject(wmiObjectQuery)
Set tcpProperties = wmiComputer.ExecQuery(wmiQuery)
MsgBox "Break! Count: " & tcpProperties.Count
If Err.Number <> 0 Then
MsgBox "Query returned no results.", 0, "Port not changed!"
WScript.Quit
End If
すべてのステップを踏むことはまったく同じです。 wmiObjectQuery
の文字列は同じですが、私が作成するwmiQuery
は同じです。 ONEを除き、私は全く違いがないことを見出した。 ExecQuery()
が呼び出され、コマンドプロンプトから実行しているときに(セットアップが終了するのを待つ間に)、TWOというレコードが返されます。一方、セットアップを試して実行しようとすると、tcpProperties.Count
が失敗するため(tcpPropertiesが設定されていないため)、エラーコントロールがトリップされてしまいます。
私の質問は、Inno Setupスクリプトではなく、コマンドプロンプトから完全に機能するのはなぜですか?
違いはInno Setupからスクリプトを実行するセキュリティコンテキストではありませんか? – Lankymart
私はあなたが何を意味するか分かりません。セットアップアプリケーションとコマンドプロンプトの両方をUserAのログインから実行すると、セキュリティに関しては同じ権利を使用する必要があります。 –
必ずしも、* elevated *コマンドプロンプトで自分自身を実行することは、Inno Setupが現在のユーザーコンテキストを実行する方法とはまったく異なる場合があります。したがって、ここでは*発生しているように見える*通常動作するWMIコマンドは失敗する可能性があります。 – Lankymart