管理者がソリューションによってインストールおよび処理される 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で動作する必要があります。