1

次のコードが Windows Server 2003 でスケジュールされたタスクとして正常に実行されるために必要なユーザー権限を知っている人はいますか?

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

スケジュールされたタスクとして実行されていない場合、つまりログインしているユーザーの下で実行されている場合、ユーザーが「Performance Monitor Users」のメンバーである限り、このコードは例外をスローしません。

同じユーザー アカウントでスケジュールされたタスクとして実行すると、失敗します。

動作させる唯一の方法は、ローカル管理者グループのメンバーとして実行することです。

何か案は?

4

4 に答える 4

2

謹んでお詫び申し上げます。私が使用していたユーザーは、「Performance Monitor Users」グループのメンバーではありませんでした。

これは、System.Diagnostics の .NET Framework 1.1 実装に必要です。

ユーザーをこのグループに追加しましたが、すべて問題ありません。

于 2008-10-01T08:26:25.477 に答える
1

スケジュールされたタスクとして実行されているアカウントに、どのようなユーザー権利を割り当てましたか? ローカル セキュリティ設定で、問題のアカウントに [バッチ ジョブとしてログオン] を指定する必要があります。

更新:あなたのアプリはファイルに書き込みますか? もしそうなら、スケジュールされたタスクのユーザーは十分な権限を持っていますか?

Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName) によって返された Process[] 配列からプロセス名をファイルに書き込むテストアプリをノックアップしたところ、スケジュールされたタスクとして正常に動作します... Users グループのメンバーのみである (「Performance Monitor Users」のメンバーでさえない) ユーザーの ID。

書き込み先のフォルダーには、SYSTEM、管理者、およびスケジュールされたタスクのユーザーに変更権限が割り当てられます。

問題の診断に役立つように、スケジュールされたタスクとして exe が失敗したことを示すコードまたは少なくとも十分に小さいスニペットを貼り付ける可能性はありますか?

乾杯
ケブ

于 2008-09-30T10:49:43.847 に答える
0

プロセス名の読み取りで見た問題の 1 つは、パフォーマンス カウンターへのアクセスが無効になる可能性があることです。

レジストリをクラックして開き、次のキーがあるかどうかを確認します: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance] "Disable Performance Counters"=dword:00000001

ゼロに設定するか、削除することができます。

于 2008-09-30T10:04:20.307 に答える
-1

MSDNから取得:

アクセス許可 LinkDemand - 直接の呼び出し元に対する完全な信頼。このメンバーは、部分的に信頼されたコードでは使用できません。

于 2008-09-30T09:36:50.357 に答える