GacInstall上的Sharepoint定时器作业,即SPJobDefinition
本文关键字:SPJobDefinition 作业 定时器 上的 Sharepoint GacInstall | 更新日期: 2023-09-27 18:08:31
我正在尝试实现一个插件架构到我们的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上在单服务器和多服务器环境上工作。
原来Network Service
一直是问题所在。我不认为这是一个问题,因为我所有的Sharepoint应用程序池通过网络服务运行,不知何故功能良好。在"本地服务"中更改"Sharepoint 2010 Timer"服务的"Log On As"修复了它。
此外,GacInstall(path)
在某些情况下不会抛出异常,包括这个,并生成没有有用信息的Windows事件,如这里所述。