GacInstall on Sharepoint Timer Job a.k.a SPJobDefinition

时间:2013-04-11 09:25:09

标签: c# sharepoint gac sharepoint-timer-job

我正在尝试为我们的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。

1 个答案:

答案 0 :(得分:0)

结果Network Service一直是个问题。我不认为这是一个问题,因为我的所有Sharepoint应用程序池都通过网络服务运行,并且运行良好。在“本地服务”上更改“Sharepoint 2010 Timer”服务的“登录为”修复了它。

另外,事实证明GacInstall(path)在某些情况下不会抛出异常,包括这个,并生成没有有用信息的Windows事件here