调试单元测试时出现“System.ComponentModel.Win32Exception: 操作成功完成”的错误。

4

我在我的类中有析构函数,并且在析构函数中启动了cmd进程。当我调试单元测试时,遇到了这个异常。以下是我的类:

class Class1
{
    ~Class1()
    {
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.Start();
    }
}

我的单元测试:

 [TestMethod]
    public void TestMethod1()
    {
        Class1 class1 = new Class1();
    }

在调试模式下运行项目时也没有异常。如何解决这个问题?有人遇到过这样的问题吗?


2
很难在“没有出错”的异常情况下获得帮助。但实际上,你必须重新考虑这个测试。 "runas"动词与单元测试不太兼容,因为没有人可以在UAC提示时说OK。 - Hans Passant
@HansPassant,我已经删除了Verb =“runas”,但它仍然抛出此异常。 - Dilshod K
当我在新任务中使用Process.Start()时,问题得到了解决。但是我仍然不明白为什么? - Dilshod K
你好,能否请您分享重现问题所需的全部代码? MyEventSource.Log.AppStarted MyEventSource.Log.AppStopped 是您内部对象。 :) - LukaszBalazy
另外,请尝试使用“EventSourceSettings.ThrowOnEventWriteErrors”。 - Tamir Daniely
显示剩余6条评论
1个回答

1
在测试代码周围添加一个try catch块。
[TestMethod]
  public void TestMethod1()
  {
     try
     {
         Class1 class1 = new Class1();
         class1 = null;
         // force Garbage Collection for finalizer to run
         GC.Collect();
     }

     catch(Win32Exception w) 
     {
         Console.WriteLine(w.Message);
         Console.WriteLine(w.ErrorCode.ToString());
         Console.WriteLine(w.NativeErrorCode.ToString());
         Console.WriteLine(w.StackTrace);
         Console.WriteLine(w.Source);
         Exception e=w.GetBaseException();
         Console.WriteLine(e.Message);
     }
  }

这将为您提供精确的错误信息。
这可能只是路径未设置的简单问题。如果是这种情况,返回的错误将是“文件未找到”。在这种情况下,可以通过将“cmd.exe”更改为“@C:\windows\system32\cmd.exe”来解决。

它不起作用。析构函数在“try”条件下无法正常工作。并且在“catch”中也显示了此异常。 - Dilshod K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接