如何在System.Security.AccessControl.Privilege.Revert()中调试System.InvalidOperationException

时间:2014-03-20 07:12:25

标签: c# .net invalidoperationexception

我有一个应用程序在事件日志中因以下错误而关闭时突然崩溃:

Application: App.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.InvalidOperationException
Stack:
   at System.Security.AccessControl.Privilege.Revert()
   at System.Security.AccessControl.Privilege.Finalize()

我在.NET reference source for that method进行了一些挖掘,似乎是在底部抛出的异常。它不能是第一个InvalidOperationException,因为它不包含任何消息,方法末尾的那个消息会抛出一个空白消息,因此它必须是匹配。

AdjustTokenPrivileges(P / Invoke)的调用失败,检查未找到预期的错误代码:

if ( error == Win32Native.ERROR_NOT_ENOUGH_MEMORY )
{
    throw new OutOfMemoryException();
}
else if ( error == Win32Native.ERROR_ACCESS_DENIED )
{
    throw new UnauthorizedAccessException();
}
else if ( error != 0 )
{
    Contract.Assert( false, string.Format( CultureInfo.InvariantCulture, "AdjustTokenPrivileges() failed with unrecognized error code {0}", error ));
    throw new InvalidOperationException();
}

documentation on this function并未强调任何可能出现问题的明显事实。

应用程序最近的唯一更改包括在应用程序中添加一个基本的自托管WCF端点(命名管道),因此我很难理解为什么会突然发生这种情况。它不是一次性的,所以我真的无法控制何时被召唤。

有人能告诉我在哪里可以找到错误代码,因为它不包含在引发的异常中吗?我还要感谢任何解释/猜测为什么在我不自己实例化访问控制类时调用此类的析构函数。 WCF是否使用访问令牌做某事? UAC已禁用,我是运行该应用程序的计算机上的本地管理员。

0 个答案:

没有答案