2017-02-06 26 views
1

私が作成した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スクリプトではなく、コマンドプロンプトから完全に機能するのはなぜですか?

+0

違いはInno Setupからスクリプトを実行するセキュリティコンテキストではありませんか? – Lankymart

+0

私はあなたが何を意味するか分かりません。セットアップアプリケーションとコマンドプロンプトの両方をUserAのログインから実行すると、セキュリティに関しては同じ権利を使用する必要があります。 –

+0

必ずしも、* elevated *コマンドプロンプトで自分自身を実行することは、Inno Setupが現在のユーザーコンテキストを実行する方法とはまったく異なる場合があります。したがって、ここでは*発生しているように見える*通常動作するWMIコマンドは失敗する可能性があります。 – Lankymart

答えて

2

イノセットアップは、32ビットを実行します。コマンドラインでは、64ビットのcscriptを実行します。違いがあります。

[Run]Flags: 64bitを追加してみてください。


Inno Setupのインストーラは、32ビットアプリケーションであるため、デフォルトでcscriptの32ビットバージョン(C:\Windows\SysWOW64\cscript)を見つけるであろう。

Inno SetupのマニュアルのInstall Mode: 32-bit vs. 64-bitも参照してください。

+0

LOL私はちょうど私の次のコメントとしてそれを書こうとしていた! Innoは64bitで動作し、コマンドプロンプトは32bitで動作しています! –

+0

マーティンありがとう!その旗がそれを釘付けにした!私はそれが使用する必要があったイノフラグに沸騰することを知っていた。 Innoには非常に多くの機能があり、通常、仕事を終わらせる方法があります。 –

+0

PS:悪名高い@Martin編集せずに「Inno Setup」の質問を投稿できる状況はないと思います。 - ありがとう! –

関連する問題