1

目前,我正在尝试为我们的 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 单服务器和多服务器环境中工作。

4

1 回答 1

0

原来Network Service是问题一直存在。我不认为这是一个问题,因为我的所有 Sharepoint 应用程序池都通过网络服务运行并且以某种方式运行良好。在“本地服务”上更改“Sharepoint 2010 计时器”服务的“登录为”修复了它。

此外,事实证明,GacInstall(path)在某些情况下(包括这种情况)不会引发异常,并且会生成没有此处提到的有用信息的 Windows 事件。

于 2013-06-19T10:33:28.973 回答