代码之家  ›  专栏  ›  技术社区  ›  Jeff Martin

ASP.NET能否模拟用户删除性能计数器类别?

  •  1
  • Jeff Martin  · 技术社区  · 16 年前

    我相信我在本地计算机上运行ASP.NET页面时已成功模拟了自己的用户帐户。

    使用描述的方法 here ,我已成功更改 WindowsIdentity.GetCurrent().Name 从ASPNET到我的域帐户。

    我可以成功写入文件系统中只有我的帐户有权访问的文件。但是,当我尝试删除性能计数器类别时,我得到 拒绝访问 .
    MyMachine\ASPNET无法访问对象 .

    if ( PerformanceCounterCategory.Exists ( PerfmonCategory ) )
            PerformanceCounterCategory.Delete ( PerfmonCategory );
    

    删除调用失败。

    (我的帐户是admin,我可以在ASP.NET上下文之外成功运行相同的代码)。

    我怀疑这个System.Diagnostics命名空间调用实际上是在调用某个COM进程,不知何故,由于第二个跃点,我被反弹了。有人能证实可能发生了什么吗?

    编辑: 访问被拒绝 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。

    例外情况详情:

    在完全信任下运行。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Otávio Décio    16 年前

    您可以在自己的应用程序池上运行应用程序(这总是一件好事),并为其分配服务用户适当的权限,这样您就不需要干扰模拟。

        2
  •  1
  •   Daniel Schaffer    16 年前

    您确实需要成为管理员才能添加或删除性能计数器。

    我不确定您为什么要使用Win32 API调用来进行模拟-我已经有一段时间没有处理过它了,但我认为您需要做的就是使用

    WindowsIdentity.GetCurrent().Impersonate()
    

    为了清楚起见,首先需要使用Windows身份验证在web应用程序中进行身份验证,然后应该能够调用Impersonate()。

    Impersonate() Method