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上在单服务器和多服务器环境上工作。

GacInstall上的Sharepoint定时器作业,即SPJobDefinition

原来Network Service一直是问题所在。我不认为这是一个问题,因为我所有的Sharepoint应用程序池通过网络服务运行,不知何故功能良好。在"本地服务"中更改"Sharepoint 2010 Timer"服务的"Log On As"修复了它。

此外,GacInstall(path)在某些情况下不会抛出异常,包括这个,并生成没有有用信息的Windows事件,如这里所述。