0

我正在尝试获取 Windows Server 2008 下的进程列表以进行管理。

我用 C# 写了一些类似的程序:

foreach ( Process clsProcess in Process.GetProcesses() )
{
    //do something
}

一切正常,直到我安排我的程序从任务计划程序运行。显然,程序无法以这种方式看到正在运行的进程(得到空列表)。

通过任务计划程序运行程序时获取进程列表的任何解决方案?

4

3 回答 3

2

我遇到了同样的问题,它与 .NET 3.5 和 4 有关。Windows Server 2008 核心或 Windows Server 2008 R2 核心不支持 System.Diagnostic.Process 类。
进程类.NET

如果您查看 Platforms,您会看到导致我头发松散的文字。我仍在寻找一种方法来做到这一点,并会在我有解决方案时发布..

事实证明,Server 2008 也不支持 System.ManagementObjectCollection 类。这是从 WMI 查询中获取集合的重要部分。

在昨天玩了一些之后,我能够想出这个肮脏的解决方案,但它确实有效。下面是我调用的 vbscript 和调用脚本的方法。

VBScript 查询流程

process = Wscript.Arguments.Item(0)
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Processs = oWMI.ExecQuery("SELECT * FROM Win32_Process where Name='"& process &"'")
count = 0
ON ERROR RESUME NEXT
FOR EACH proc IN Processs
    count = count + 1
Next
IF Err.Number > 0 THEN
    count = -1
END IF
wscript.StdOut.Write count

C#方法调用脚本

 private bool IsProcessRunning()
    {
        int pcReturn = -1;
        bool blRunning = false;
        String strCmd = @"cscript";
        String arg = "//B //Nologo ProcessSearch.vbs YourProcess.exe";

        System.Diagnostics.ProcessStartInfo psi = new     System.Diagnostics.ProcessStartInfo(strCmd);
        psi.RedirectStandardOutput = true;
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        psi.UseShellExecute = false;
        psi.Arguments = arg;

        System.Diagnostics.Process procQuery;
        procQuery = System.Diagnostics.Process.Start(psi);
        String output = procQuery.StandardOutput.ReadToEnd();
        procQuery.WaitForExit();
        if (procQuery.HasExited)
        {
            bool isInt = Int32.TryParse(output, out pcReturn);
            if (!isInt)
            {
                pcReturn = -1;
            }
            else
            {
                if (pcReturn > 1)
                {
                    blRunning = true;
                }
            }
        }
        return blRunning;
    }
于 2011-04-13T14:38:52.627 回答
1

艾伦,我绝对不是专家,但这听起来像是用户权限。

显然,在任务计划程序中设置任务时,您可以选择它将以哪个用户身份运行,以及随后该任务具有哪组权限。

也许这个链接会有用。

于 2011-03-31T09:43:26.017 回答
0

我不知道这种行为的原因。但也许 System.Management API 将在这种情况下工作。这是一个例子

于 2011-03-31T09:38:54.663 回答