C#で記述されたコンソールアプリケーションがあり、組み込みのWindowsタスクスケジューラを使用して15分ごとに実行するようにスケジュールされています。
実行するたびに、実行中は黒いコンソールボックスがポップアップし、閉じます。コンソールには何も書いていません。これをバックグラウンドで実行する方法はありますか?
簡単!
信じがたいように思えますが、それは魅力として機能します。兆候のないカスタムタスクを実行したいときに、いくつかのセットアッププロジェクトにこれを使用しました。
どのフォームにも電話をかけないでください。コンソールアプリケーションとまったく同じように続ける
class Program
{
static void Main(string[] args)
{
// Just don't call Application.Run(new frmMain(args));
// ... your code
}
}
これは、最初のフォームと参照を除いて、Windowsアプリケーションプロジェクトがコンソールと実際に変わらないためです。それは完全に隠された実行です。それを試してみてください!
プロジェクト>プロパティ>アプリケーションタブ>出力タイプを「Windowsアプリケーション」に変更します。
コンソールウィンドウはもうありません。
Windows APIを使用して、コンソールボックスを最小化できます。それ以外の場合は、実際にフォームをロードしないSystem.Windows.Forms.Application.Run()
を呼び出すWindows EXEファイルにすることができます。
コンソールを最小化するコード:
[DllImport( "user32.dll" )]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public const int SW_SHOWMINIMIZED = 2;
IntPtr winHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
ShowWindow(winHandle, SW_SHOWMINIMIZED);
アプリをWindowsサービスに実装するのはどうですか?間隔を15分に設定し、timer_tickで操作を実行できます。
既にWindowsコンソールアプリを作成している場合は、アプリの出力タイプをWindowsアプリケーションに変更するだけです。
プロジェクトの下:[プロパティ]> [アプリケーション]に移動します[出力タイプ]として[Windowsアプリケーション]を選択します。
これは最も影響が少なく、Windowsタスクスケジューラで同じタスクを実行し続けることができます。
コンソールに何も書き込まない場合は、サービスにすることができます。 http://msdn.Microsoft.com/en-us/library/9k985bc9%28VS.80%29.aspx
現在ログインしているユーザーと同じユーザーとして実行するようにスケジュールされている場合にのみ表示されます。マシン上で途方もなく長いパスワードで別のユーザーを作成し、管理者(必要な場合のみ)に設定し、そのタスクを実行するようにスケジュールしますユーザー。
そこに何か他のものとして汚い( ここから ):
このプロセスには3つのファイルが必要です。 _
launch.bat
_、_invis.vbs
_、および(プログラム)。 launch.bat(このファイルはプログラムをサイレントで実行します)に、_wscript.exe "C:\yourpath\invis.vbs" "your file.bat"
_を入れます。 _invis.vbs
_に、
CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False
そして最後に、ファイルに_
launch.bat
_、必要なものを何でも入れます..._
echo off erase c:\junk.txt
_。できました。 _launch.bat
_を開くだけです。
それは魅力のように動作します。最初のbat(launch.bat)を起動し、次に、ステルスでサービス/実行可能ファイルを起動します。だから、それは元の起動のための迅速なblipであり、その後消えました。
これは簡単。ログインアカウントではないアカウントで実行するようにタスクを設定します。