1

リボン ボタンを使用してリストからタイマー ジョブを実行しようとしていますが、ボタンをクリックするとページがポップアップします。そのページの読み込みで、runwithelevatedprivileges とjob.runnow(). 実稼働環境でアクセス拒否の例外が発生していますが、システム テストでは問題なく動作していました。次のコードを参照してください。

 SPWebApplication mainWebApp = SPContext.Current.Site.WebApplication;
 bool b = mainWebApp.RunningJobs.Cast<SPRunningJob>().Any(curRunningJob => curRunningJob
                    .JobDefinitionTitle.Equals("JobName"));
                try
                {
                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        SPJobDefinition job = mainWebApp.JobDefinitions.Cast<SPJobDefinition>().
                            FirstOrDefault(i => i.DisplayName.Equals("JobName"));
SPContext.Current.Web.AllowUnsafeUpdates = true;
                                job.RunNow();//getting access denied exception at this line 
4

1 に答える 1

0

TimerJobs はファーム (configdb) アイテムです。
したがって、それらを操作するには、ファームの管理者である必要があります。つまり、現在のユーザーがファーム管理者である必要があります (使用している認証方法によっては、問題が発生する場合もあります)。
または、Web アプリを実行するアプリ プールのサービス アカウントはファーム管理者であり、runwithelevatedpriviledges を使用する必要がありますが、これは明らかにセキュリティ上の理由からひどい考えです。
または、ファーム管理者をどこかに保存し、そこからコンテキストを作成する必要があります (これは、セキュリティ、パフォーマンス、保守性にも悪影響を及ぼします)。
Web インターフェイスからタイマージョブをトリガーする必要がないように、ソリューションを確認することを強くお勧めします。

于 2016-09-29T22:51:35.377 に答える