1

これが私のコードスニペットです:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    SPSolution newSolution = SPFarm.Local.Solutions.Add(@fullPath);                            
});

スタックトレースとinnerexceptionは、それ以上の手がかりを与えません。Exception.SourceにはMicrosoft.SharePointと記載されています。

SPFarm.Local.CurrentUserIsAdministrator()は、ユーザーIDに対してTRUEを返します。

ユーザーIDはFarmAdministratorsグループにあります。

何か案は?

編集

コードを次のように変更しても、AccessDeniedエラーが発生します。

private void AddSolution()
{
   SPSolution newSolution = SPFarm.Local.Solutions.Add(@fullPath);
}

SPSecurity.CodeToRunElevated elevatedAddSolution = new SPSecurity.CodeToRunElevated(AddSolution);
SPSecurity.RunWithElevatedPrivileges(elevatedAddSolution);
4

3 に答える 3

1

あなたが抱えている問題は、静的メンバーを使用してSPFarmオブジェクトにアクセスしているという事実が原因であると私は信じています。これは、SPcontext静的クラスの実行に似ていると思います。SPcontext静的クラスは、昇格された特権コンテキスト(ローカルアプリケーションプールID)ではなく、ログオンしたユーザーのセキュリティコンテキストで実行されます。

代わりに、デリゲート内でこれを試してください。

SPFarm spFarm = SPWebService.AdministrationService.Farm;
SPSolution newSolution = spFarm.Solutions.Add(@fullPath);

編集:上記は役に立たなかったので、あなたの問題はおそらく構成データベースへのデータベース権限に関係しています。RunWithElevatedPriviligesは、コードが実行されているアプリケーションプールのIDで実行されます。ファームにソリューションを追加すると、構成データベースに影響するため、アプリケーションプールIDは構成データベースにアクセスする必要があります。テストとして、アプリプールIDを構成データベースに追加し、dbo権限を付与してみてください。それで問題が解決した場合は、各アプリプールアカウントがソリューションを追加するために必要な最小限の権限を見つける必要があります(dboのままにしないでください)

于 2009-02-11T16:12:21.977 に答える
1

あなたの主な問題は、あなたが SharePoint データベースの DBO ではないことかもしれません (私が間違っていなければ _Config)。ファームにソリューションを追加するには、ファームへのアクセスだけでなく、より多くの権限が必要です。

これを実行しているユーザーがファーム管理者であり、適切なデータベースの DBO であることを確認してください。

それでも問題が解決しない場合は...実行してみてください

stsadm -o addsolution -filename "myWsp.wsp"

適切な権利があれば、適切なエラーが発生します。

于 2009-02-12T05:03:05.397 に答える