同じ問題が発生していますが、.NET 3.5および4と関係があります。System.Diagnostic.Processクラスは、WindowsServer2008コアまたはWindowsServer2008R2コアではサポートされていません。
プロセスクラス.NET
プラットフォームを見ると、残りの髪の毛を失う原因となったテキストが表示されます。私はまだこれを行う方法を探しており、解決策があれば投稿します。
System.ManagementObjectCollectionクラスはServer2008でもサポートされていないことがわかりました。これは、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;
}