GetProcessesByName() and Windows Server 2003 scheduled task

拈花ヽ惹草 提交于 2020-02-25 08:23:07

问题


Does anybody know what user privileges are needed for the following code needs to successfully execute as a scheduled task on Windows Server 2003:

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

When NOT running as scheduled task i.e. under a logged in user, as long as the user is a member of "Performance Monitor Users", this code will not throw an exception.

When running as a scheduled task under the same user account, it fails.

The only way I can get it to work is to run it as a member of the Local Administrator group.

Any ideas?


回答1:


My humblest apologies. The user I was using was NOT a member of "Performance Monitor Users" group.

This is necessary for .NET Framework 1.1 implementation of System.Diagnostics.

I have added the user to this group, and all is well.




回答2:


What user rights assignments have you given the account that is running as a scheduled task? You'll need to give the account in question 'Log on as a batch job' in your local security settings.

Update: Does your app write to any files and if so does the scheduled task user have enough rights?

I just knocked up a test app that writes the process names from the Process[] array returned by Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName) to a file and it works just fine as a scheduled task...even running under the identity of a user that is only a member of the Users group (not even a member of 'Performance Monitor Users'.

The folder it writes to is assigned modify rights to SYSTEM, Administrators and the scheduled task user.

Any chance of pasting your code or at least a small enough snippet that demonstrates the exe failing as a scheduled task so we can help diagnose the problem?

Cheers
Kev




回答3:


One issue that I have seen with reading the process name is that access to the performance counters can get disabled.

Crack open your registry and see if this key is there: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance] "Disable Performance Counters"=dword:00000001

You can either set it to zero or deleted it.




回答4:


Taken from MSDN:

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



来源:https://stackoverflow.com/questions/152337/getprocessesbyname-and-windows-server-2003-scheduled-task

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!