Windowsバッチファイルを実行してコマンドウィンドウを非表示にするにはどうすればよいですか?ファイルの実行中にcmd.exeを画面に表示したくありません。これは可能ですか?
unmanaged program を記述し、 CreateProcess APIを使用する場合は、タイプのlpStartupInfo
パラメーターを初期化する必要があります [〜#〜 ] startupinfo [〜#〜] 構造体のwShowWindow
フィールドが SW_HIDE であり、dwFlags
で_STARTF_USESHOWWINDOW
_フラグを使用することを忘れないように [〜#〜] startupinfo [〜#〜] のフィールド。別の方法は、 CREATE_NO_WINDOWdwCreationFlags
パラメーターのフラグを使用することです。 ShellExecute および ShellExecuteEx 関数でも同じトリックが機能します。
managed application を作成する場合は、 http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindowからのアドバイスに従う必要があります。 aspx :ProcessStartInfo
を_CreateNoWindow = true
_および_UseShellExecute = false
_で初期化してから、のパラメーターとして使用します。 WindowStyle
のプロパティProcessStartInfo
を代わりに、または_ProcessWindowStyle.Hidden
_と一緒に_CreateNoWindow = true
_に設定できる場合とまったく同じです。
は、wcsript.exeで始まるVBS script を使用できます。スクリプト内で、CreateObject("WScript.Shell")
を使用し、2番目の(intWindowStyle
)パラメーターとして0を指定して Run を使用できます。例として http://www.robvanderwoude.com/files/runnhide_vbs.txt を参照してください。 Kix、 PowerShell などに進みます。
プログラムを作成したくない場合は、既存のユーティリティのように使用できます CMDOW/RUN/HID "c:\ SomeDir\MyBatch.cmd" 、 hstart/NOWINDOW/D = c:\ scripts "c:\ scripts\mybatch.bat" 、 hstart/NOCONSOLE "batch_file_1.bat" まったく同じです。このような種類の無料のユーティリティがきっと見つかるはずです。
一部のシナリオ(たとえばNCパスから開始)では、作業ディレクトリもローカルパス(_%SystemRoot%\system32
_常に動作するように設定することが重要です。 )。これは、非表示のバッチを開始する上記のバリアントからの使用に重要です。
C#を使用すると、ウィンドウを開かずにバッチコマンドを簡単に開始できます。次のコード例をご覧ください。
Process process = new Process();
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "doSomeBatch.bat";
process.Start();
任意の実行可能ファイルについて、「c」パラメーターを指定したcmdを使用してプログラムを実行できます。
cmd /c "your program address"\"YourFileName".bat
(->バッチファイルの場合!)最終的な解決策として、.cmdファイルを作成し、このコマンドをそのファイルに含めることをお勧めします。
cmd /c "your program address"\"YourFileName".bat
exit
次に、この.cmdファイルを実行します。
ここ外部ツールを使用せずにバッチで非表示プロセスを開始することがわかっているすべての方法をコンパイルしました。スクリプト(一部はオプションが豊富)を使用し、それらはすべてコマンドラインを形成します。可能な場合はPIDも返されます。使用ツールはIEXPRESS、SCHTASKS、WScript.Shell、Win32_Process、JScript.Netですが、すべてラップされています.bat
ファイル。
technet からのこの小さなVBScriptはトリックを行います:
Const HIDDEN_WINDOW = 12
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("mybatch.bat", null, objConfig, intProcessID)
編集mybatch.bat
batファイル名に、vbsとして保存して実行します。
Docによると、Win7ではテストされていませんが、テストしただけで正常に動作します。実行するプロセスのウィンドウは表示されません
ネイティブC++はOlegの回答の成文化バージョンです-これは、Boost Software Licenseの下で 私が取り組んでいるプロジェクト からコピー/貼り付けられています。
BOOL noError;
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInformation;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_HIDE;
noError = CreateProcess(
NULL, //lpApplicationName
//Okay the const_cast is bad -- this code was written a while ago.
//should probably be &commandLine[0] instead. Oh, and commandLine is
//a std::wstring
const_cast<LPWSTR>(commandLine.c_str()), //lpCommandLine
NULL, //lpProcessAttributes
NULL, //lpThreadAttributes
FALSE, //bInheritHandles
CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT, //dwCreationFlags
//This is for passing in a custom environment block -- you can probably
//just use NULL here.
options.e ? environment : NULL, //lpEnvironment
NULL, //lpCurrentDirectory
&startupInfo, //lpStartupInfo
&processInformation //lpProcessInformation
);
if(!noError)
{
return GetLastError();
}
DWORD exitCode = 0;
if (options.w) //Wait
{
WaitForSingleObject(processInformation.hProcess, INFINITE);
if (GetExitCodeProcess(processInformation.hProcess, &exitCode) == 0)
{
exitCode = (DWORD)-1;
}
}
CloseHandle( processInformation.hProcess );
CloseHandle( processInformation.hThread );
バッチファイルを実行するだけのWindowsサービスを作成できます。サービスは独自のデスクトップセッションで実行されるため、コマンドウィンドウはユーザーに表示されません。
Bat To Exe Converter を使用し、Batファイルを実行可能ファイルとしてコンパイルします。
手順:
right-click
を使用し、Create shortcut
を選択して、bat
ファイルへのショートカットを作成します。 Right-click
作成したショートカットで[プロパティ]をクリックします。 [実行]ドロップダウンボックスをクリックし、[最小化]を選択します。