我正在尝试为我们的Sharepoint解决方案实施插件架构,此时管理员可以上传将由我们的解决方案安装和处理的dll文件。
实施需要GAC安装上传的dll,我已经使用
完成了private void InstallToGac(byte[] libraryContent, string filename)
{
string path = tempFolder + filename;
File.WriteAllBytes(path, libraryContent);
try
{
new System.EnterpriseServices.Internal.Publish().GacInstall(path);
}
catch (Exception ex)
{
Logger.Error("Error while installing dll to GAC.", ex);
throw;
}
finally
{
File.Delete(path);
}
}
这只是将dll安装到GAC,如果在Sharepoint上下文中调用它,则工作正常。但是,它不适用于多服务器环境,因为它只会将其安装在管理员上载文件的前端。所以,我已经通过继承SPJobDefinition
将上面的代码移到了计时器作业。 GacInstall不再将dll安装到GAC。在调试模式GacInstall
行上工作正常,不会抛出任何异常,但也没有任何影响。
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
在计时器作业中返回Network Service
。我在单服务器Sharepoint 2010 Foundation上工作,但我需要在单个和多服务器环境中使用它来处理2007/2010/2013。
答案 0 :(得分:0)
结果Network Service
一直是个问题。我不认为这是一个问题,因为我的所有Sharepoint应用程序池都通过网络服务运行,并且运行良好。在“本地服务”上更改“Sharepoint 2010 Timer”服务的“登录为”修复了它。
另外,事实证明GacInstall(path)
在某些情况下不会抛出异常,包括这个,并生成没有有用信息的Windows事件here。