2

私の質問は、 Running a CMD or BAT in silent modeに似ていますが、追加の制約が 1 つあります。

vbscript でWshScript.Runを使用すると、プロセスの標準の in/error/out ストリームにアクセスできなくなります。 WshScript.Execを使用すると、標準ストリームにアクセスできますが、ウィンドウを非表示にすることはできません。ケーキを食べて (ウィンドウを隠して)、それを食べる (コンソール ストリームに直接アクセスする) にはどうすればよいでしょうか?

私は現在、新しい Windows ステーションとデスクトップを作成し ( MSDNを参照)、その新しいデスクトップ内で指定されたスクリプトを実行する C++ 実行可能ファイルについて考えています (私はまだ Windows ステーションとデスクトップの専門家ではないので、このアイデアは遅い)。

このアイデアは、 Condorの 機能に大まかに基づいています。このUSE_VISIBLE_DESKTOP機能を無効にすると、非表示のデスクトップで Condor ジョブが実行されます。これに高い特権が必要かどうかはよくわかりません。

このアプローチのトレードオフは、スクリプトがユーザー入力でブロックされると、スクリプトが途方に暮れる可能性があることです。

追加のアイデアはありますか?または、上記のアプローチに関するフィードバックはありますか?

編集:

また、このスクリプトの目的はユーザー環境をセットアップすることなので、別のユーザーとして実行したり、システムのスケジュールされたタスクとして実行したりすることは、実際にはオプションではありません (私が知らない巧妙なトリックがない限り)。

4

4 に答える 4

1

上記の VBScript フラグメントではうまくいきませんでした。ウィンドウは引き続きポップアップします。ただし、必要なもののように見えるhstartというツールを見つけました。残念ながら、それはオープンソースではなく、商用利用は無料です。

于 2009-02-04T18:50:08.427 に答える
0

CreateProcess Windows API 呼び出し用のコマンドライン インターフェイスを提供する、私が作成したフリーウェア ツールExecを使用できます。GUI版はコンソール自体がなく、隠しウィンドウでシェルスクリプト(バッチファイル)を起動することができます。

明細書

于 2013-03-03T20:02:06.797 に答える
0

私はこれを少しだけテストしたので、YMMV...

次のコードを .vbs ファイルに入れます (私は HideWindow.vbs と呼びました)。

Const HIDDEN_WINDOW = 12

computer = "."
Set oWmiService = GetObject("winmgmts:" & _
                            "{impersonationLevel=impersonate}!\\" & _
                            computer & "\root\cimv2")
Set oStartup = oWmiService.Get("Win32_ProcessStartup")

Set oConfig = oStartup.SpawnInstance_
oConfig.ShowWindow = HIDDEN_WINDOW
Set oProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
ret = oProcess.Create("cmd.exe /c C:\Scripts\test.cmd", null, oConfig, pid)

次のように、バッチ ファイルまたはコマンド ラインから呼び出します。

CSCRIPT HideWindow.vbs

入力したものはtest.cmd、ウィンドウを表示せずに実行されます。これはいくつかの方法で改善できますが、特に によって呼び出されるプログラムをパラメータ化することによって改善できますoProcess.Create

于 2009-01-29T19:39:58.640 に答える