Sharepoint SPFarm.Local.Solutions.Add-异常-“;“拒绝访问”;

Sharepoint SPFarm.Local.Solutions.Add-异常-“;“拒绝访问”;,sharepoint,sharepoint-2007,Sharepoint,Sharepoint 2007,以下是我的代码片段: SPSecurity.RunWithElevatedPrivileges(delegate() { SPSolution newSolution = SPFarm.Local.Solutions.Add(@fullPath); }); stacktrace和innerexception没有提供进一步的线索。例外情况。来源显示Microsoft.SharePoint SPFarm.Local.CurrentUs

以下是我的代码片段:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    SPSolution newSolution = SPFarm.Local.Solutions.Add(@fullPath);                            
});
stacktrace和innerexception没有提供进一步的线索。例外情况。来源显示Microsoft.SharePoint

SPFarm.Local.CurrentUserIsAdministrator()为用户ID返回TRUE

用户ID位于服务器场管理员组中

有什么想法吗

编辑

我已将代码更改为以下内容,但仍然出现访问被拒绝错误:

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

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

您是否尝试在调用RunWithElevatedPriviliges之外声明委托

编辑:忽略以下内容,因为您似乎已检查权限


RunWithElevatedPriviliges将使用SP运行的应用程序池的标识。您是否已确保此帐户在您的环境中具有足够的权限?

我确信您遇到的问题是由于您正在使用静态成员访问SPFarm对象。我认为这类似于运行SPcontext静态类,它仍将在登录用户的安全上下文下运行,而不是在提升的Privileges上下文(即本地应用程序池标识)下运行

请在代理中尝试以下操作:

SPFarm spFarm = SPWebService.AdministrationService.Farm;
SPSolution newSolution = spFarm.Solutions.Add(@fullPath);
编辑:
由于上述方法没有帮助,因此您的问题可能与配置数据库的数据库权限有关。RunWithLevelatedPriviliges将在代码运行的应用程序池的标识下运行。向服务器场添加解决方案会影响配置数据库,因此应用程序池标识将需要访问配置数据库。作为测试,请尝试将应用程序池标识添加到配置数据库,并授予其dbo权限。如果这解决了问题,那么您需要找到每个应用程序池帐户添加解决方案所需的最小权限(不要保留为dbo)

您的主要问题可能只是您不是sharepoint数据库的dbo(\u Config,如果我没有错的话)。向服务器场添加解决方案需要更多的权限,而不仅仅是访问服务器场

确保运行此服务器的用户是服务器场管理员和正确数据库的DBO

如果你还有问题。。。试着跑步

stsadm-o addsolution-filename “myWsp.wsp”


如果你有适当的权限,它会给你适当的错误。

你的第一个问题是什么意思?我的意思是基本上尝试你上面所做的,尽管它似乎不起作用。你是否像前面讨论的那样在本地web服务上运行此功能?我还没有做到这一点。现在我把它放在了ASPX页面的版面中。几周前它还有效,但现在不行。我表现出我的懒惰和无知。如何查找配置数据库的名称?注册表:HKLM\Software\Microsoft\Shared Tools\Web Server Extensions\12.0\Secure\ConfigDB这就是问题所在。我运行stsadm,它得到并出错,我查看事件日志,它说我的userid没有访问配置数据库的权限。