2011-09-18 11 views
1

私は独自のプロセスで発売MAFプラグインの中でそれを実行することにより、潜在的に悪質なコードをサンドボックス化しようとしています:"AddInProcess.exeが動作を停止しました"を抑止できますか?

var x = token.Activate<Ix>(new AddInProcess(), AddInSecurityLevel.Internet); 

これは、StackOverflowExceptionがを処理するときにダイアログが表示されていることを除いてうまく動作するようだ:「AddInProcess.exeは動作を停止しました "。これは、睡眠の有効期限が切れる前に、私はそれ以外の場合は失敗し、テストが成功し、「閉じる」ボタンをクリックすると、それは非常に難しい

[TestMethod] 
    public void TestStackOverflow() { 
     var host = new Host(Environment.CurrentDirectory 
      + "/../../../build/pipeline"); 
     host.Run("foo"); 
     host.Tick(); 
     Thread.Sleep(1000); 
     host.Monitors.Count.Should().Be(0); 
     host.Shutdown(); 
    } 

をテストすることができます。これは、「閉じる」ボタンが押されるまでプロセスが終了しないことを示します。プロセスが終了することを期待しているので、このダイアログを表示せずにどうすればよいのですか?私は自分のOSを「解決を決してチェックしない」ように設定しようとしましたが、まだダイアログが表示されています。自動的に解決策をチェックするように設定すると、ダイアログが表示されなくなりますが、望ましくない最大10秒かかります。OSの設定を避けたいと思います。

AddInProcess.exe has stopped working

答えて

4

あなたがそうのようなアドイン・プロセス内のどこかにSetErrorModeを呼び出すことができます魔法のように

[Flags] 
    enum ErrorModes : uint { 
     SYSTEM_DEFAULT = 0x0, 
     SEM_FAILCRITICALERRORS = 0x0001, 
     SEM_NOALIGNMENTFAULTEXCEPT = 0x0004, 
     SEM_NOGPFAULTERRORBOX = 0x0002, 
     SEM_NOOPENFILEERRORBOX = 0x8000 
    } 

    [DllImport("kernel32.dll")] 
    static extern ErrorModes SetErrorMode(ErrorModes uMode); 

    var em = SetErrorMode(0); 
    SetErrorMode(em | ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOOPENFILEERRORBOX); 
+1

作品、どうもありがとうございました! –

関連する問題