1

管理者がソリューションによってインストールおよび処理される dll ファイルをアップロードできる時点で、プラグイン アーキテクチャを SharePoint ソリューションに実装しようとしています。

実装には、アップロードされた dll の GAC インストールが必要です。

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 Appプールはネットワークサービス経由で実行され、何らかの形で正常に機能するため、問題とは見なしませんでした..「ローカルサービス」で「Sharepoint 2010タイマー」サービスの「ログオン」を変更すると修正されました。

また、これを含むいくつかのケースでは例外をスローせず、ここでGacInstall(path)述べたように有用な情報を持たない Windows イベントを生成することが判明しました。

于 2013-06-19T10:33:28.973 に答える