2009-08-27 3 views
18

プログラムがVisual Studioから読み込まれたかどうかを検出する方法はありますか?Windowsエクスプローラから実行するのではなく、Visual Studioによってプログラムが実行されたかどうかの検出

私たちのソフトウェアには、未処理の例外を処理するためのバグレポート機能があります。私たちはベータテスターに​​デバッグビルドを配布する必要がありますが、途中でバグレポートを表示したくないなぜなら、VSが完全なスタックトレースなどでそれらをキャッチしている場合、例外がより有用であるからです。

Application.ExecutablePathにbin \ Debugまたはbin \ Releaseが含まれている場合は、バグレポートを無効にします。おそらく、プログラムがVS経由で読み込まれたかどうかを検出するより堅牢な方法があります。

明らかに、私たちはいくつかのプリプロセッサマクロを使って別のビルドをセットアップすることができましたが、質問のために、可能性はないと仮定してください - コードを追加しても構いませんが、ビルドプロセスの変更が最小限に抑えられているため、コマンドラインオプションも最後の手段となります。

私はVS2003/.NET 1.1を使用しています。

答えて

40

あなたはそれがに(@JaredParによって清澄)任意ののデバッガであるかどうかを判断するためにこれをやっている場合は、例外ハンドラでDebugger.IsAttachedを使用することができます。

try 
{ 
    // ... 
} 
catch(Exception ex) 
{ 
    if (!Debugger.IsAttached) 
    { 
     ExceptionHandler.Frob(ex); 
    } 
    else 
    { 
     throw; 
    } 
} 

代わり:プロセスツリーによって

public static void Frob(Exception ex) 
{ 
    if (Debugger.IsAttached) 
    { 
     Debugger.Break(); 
    } 
} 
+1

これは正確に「私は、探しているが、私はそれを知るだろう "答えの種類 - 完璧、ありがとう! –

+1

System.Diagnosticsにはたくさんのすばらしさがあります。 – user7116

+2

Visual Studioが接続されている場合ではなく、デバッガが接続されているかどうかを確認することができます。 WinDbgをアタッチすると、同じ動作が発生します。 – JaredPar

1

私は開発していませんが、javaではアプリケーションの起動オプションにフラグを渡してこれを行いました。だからあなたはIDEからデバッグフラグを渡すことができますし、そのことを確認してください、アプリケーションが実行可能ファイルとして実行されるとき、フラグは存在しません。 .netに似たようなものがなかったら私は驚くだろう。

+0

ビルド/実行プロセスを可能な限り変更しないようにしようとしていますが、はい、.NETのコマンドラインオプションも読み取ることができます:) –

2

コマンドライン引数を考慮しましたか? Visual Studioから--no-exception-handlingフラグ(または適切な音)を指定してプログラムを実行し、その引数が渡された場合は例外を処理しないでください。この引数を指定せずにプログラムを起動すると、正常に動作します。

0

代わりの追跡、私は、レポート機能を有効に設定フラグを追加します。このフラグは、DEV環境にいないかぎり "false"に設定しない限り、常にデフォルトの "true"に設定できます。

関連する問題