GetProcessesByName()およびWindows Server 2003のスケジュールされたタスク
-
02-07-2019 - |
質問
次のコードがWindows Server 2003でスケジュールされたタスクとして正常に実行するために必要なユーザー権限が誰にあるかを知っていますか:
System.Diagnostics.Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)
スケジュールされたタスクとして、つまりログインしているユーザーとして実行していない場合、ユーザーが「パフォーマンスモニターユーザー」のメンバーである限り、このコードは例外をスローしません。
同じユーザーアカウントでスケジュールされたタスクとして実行すると、失敗します。
これを機能させる唯一の方法は、ローカル管理者グループのメンバーとして実行することです。
アイデアはありますか
解決
ごめんなさい。私が使用していたユーザーは、「パフォーマンスモニターユーザー」のメンバーではありませんでした。グループ。
これは、System.Diagnosticsの.NET Framework 1.1実装に必要です。
このグループにユーザーを追加しましたが、すべて順調です。
他のヒント
スケジュールされたタスクとして実行されているアカウントにどのようなユーザー権利の割り当てを与えましたか?ローカルセキュリティ設定で、問題のアカウントに「バッチジョブとしてログオン」を与える必要があります。
更新:アプリは任意のファイルに書き込みますか?書き込みがある場合は、スケジュールされたタスクユーザーに十分な権限がありますか?
Process.GetProcessesByName(Process.GetCurrentProcess()。ProcessName)によって返されたProcess []配列からプロセス名をファイルに書き込むテストアプリをノックアップしましたが、スケジュールされたタスクとして正常に動作します... Usersグループのメンバーのみであるユーザー(「パフォーマンスモニターユーザー」のメンバーでもない)のIDで実行している場合でも。
書き込み先のフォルダーには、SYSTEM、管理者、およびスケジュールされたタスクユーザーへの変更権が割り当てられます。
問題を診断するのに役立つように、スケジュールされたタスクとしてexeが失敗することを示すコードまたは少なくとも十分小さいスニペットを貼り付ける可能性はありますか?
乾杯
ケブ
プロセス名の読み取りに関する問題の1つは、パフォーマンスカウンターへのアクセスが無効になる可能性があることです。
レジストリをクラックして、このキーが存在するかどうかを確認します。 [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ PerfProc \ Performance] "パフォーマンスカウンターを無効にする" = dword:00000001
ゼロに設定するか、削除することができます。
MSDN から取得:
許可 LinkDemand-完全な すぐに発信者を信頼します。この メンバーは部分的に使用できません 信頼できるコード。