GetProcessesByName()和Windows Server 2003计划的任务

时间:2020-03-06 14:54:53  来源:igfitidea点击:

是否有人知道以下代码需要哪些用户特权才能在Windows Server 2003上作为计划任务成功执行:

System.Diagnostics.Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)

当不按计划任务运行时(即在已登录用户的情况下),只要该用户是"性能监视器用户"的成员,此代码就不会引发异常。

当在同一用户帐户下作为计划任务运行时,它将失败。

使它正常工作的唯一方法是将其作为本地管理员组的成员运行。

有任何想法吗?

解决方案

来自MSDN:

Permissions  LinkDemand - for full
  trust for the immediate caller. This
  member cannot be used by partially
  trusted code.

我在阅读进程名称时发现的一个问题是,可以禁用对性能计数器的访问。

破解注册表,看看是否存在此注册表项:
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ PerfProc \ Performance]
"禁用性能计数器" = dword:00000001

我们可以将其设置为零或者删除它。

我们已为作为计划任务运行的帐户分配了哪些用户权限分配?我们需要在本地安全设置中为有问题的帐户"以批处理作业身份登录"。

更新:应用程序是否写入任何文件,如果是,则计划任务用户是否具有足够的权限?

我刚刚敲了一个测试应用程序,该应用程序将由Process.GetProcessesByName(Process.GetCurrentProcess()。ProcessName)返回的Process []数组中的进程名称写入文件,并且可以很好地用作计划任务...甚至在仅是"用户"组成员(甚至不是"性能监视器用户"的成员)的用户的身份。

向其写入的文件夹分配了对SYSTEM,Administrators和计划任务用户的修改权限。

是否有任何机会粘贴代码或者至少有一个足够小的代码段,以证明该exe作为计划任务失败,因此我们可以帮助诊断问题?

干杯
凯夫

我最谦虚的歉意。我使用的用户不是" Performance Monitor用户"组的成员。

这是System.Diagnostics的.NET Framework 1.1实施所必需的。

我已将该用户添加到该组中,一切顺利。