web-dev-qa-db-ja.com

バックグラウンドで.NETコンソールアプリケーションを実行する方法

C#で記述されたコンソールアプリケーションがあり、組み込みのWindowsタスクスケジューラを使用して15分ごとに実行するようにスケジュールされています。

実行するたびに、実行中は黒いコンソールボックスがポップアップし、閉じます。コンソールには何も書いていません。これをバックグラウンドで実行する方法はありますか?

53
etoisarobot

簡単!

信じがたいように思えますが、それは魅力として機能します。兆候のないカスタムタスクを実行したいときに、いくつかのセットアッププロジェクトにこれを使用しました。

  • プロジェクトをWindowsアプリケーションプロジェクトとして作成します(これは難しい部分です)。
  • どのフォームにも電話をかけないでください。コンソールアプリケーションとまったく同じように続ける

    class Program
    {
        static void Main(string[] args)
        {
            // Just don't call Application.Run(new frmMain(args));
    
            // ... your code
        }
     }
    

これは、最初のフォームと参照を除いて、Windowsアプリケーションプロジェクトがコンソールと実際に変わらないためです。それは完全に隠された実行です。それを試してみてください!

50
Daniel Dolz

プロジェクト>プロパティ>アプリケーションタブ>出力タイプを「Windowsアプリケーション」に変更します。

コンソールウィンドウはもうありません。

161
Hans Passant

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);
10
JDMX

アプリをWindowsサービスに実装するのはどうですか?間隔を15分に設定し、timer_tickで操作を実行できます。

9
Erup

既にWindowsコンソールアプリを作成している場合は、アプリの出力タイプをWindowsアプリケーションに変更するだけです。

プロジェクトの下:[プロパティ]> [アプリケーション]に移動します[出力タイプ]として[Windowsアプリケーション]を選択します。

これは最も影響が少なく、Windowsタスクスケジューラで同じタスクを実行し続けることができます。

5
Chanrith

コンソールに何も書き込まない場合は、サービスにすることができます。 http://msdn.Microsoft.com/en-us/library/9k985bc9%28VS.80%29.aspx

3
nportelli

現在ログインしているユーザーと同じユーザーとして実行するようにスケジュールされている場合にのみ表示されます。マシン上で途方もなく長いパスワードで別のユーザーを作成し、管理者(必要な場合のみ)に設定し、そのタスクを実行するようにスケジュールしますユーザー。

2
John Sheehan

そこに何か他のものとして汚い( ここから ):

このプロセスには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であり、その後消えました。

1
Kyle Rozendo

これは簡単。ログインアカウントではないアカウントで実行するようにタスクを設定します。

0
37Stars