Использование библиотек, размещённых на сервере или в интернете

    По умолчанию в .Net Framework 3.5  использование на локальной машине .Net библиотек, расположенных удалённо запрещено политикой безопасности! Для того, чтобы выполнить приведённые ниже действия, вы должны иметь возможность запустить приведённый ниже код с правами администратора!

    Для того, чтобы дать разрешение на использование таких библиотек нужно воспользоваться командой CasPol.exe, входящей в состав .Net Framework. Интерес по теме представляет собой и эта статья.

Вызывать данную команду (с правами администратора) следует в командной строке Windows. В моём случае это выглядело так:

CasPol.exe -m -ag 1.2 -url "file://\\hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadLibs/*" FullTrust

    На появившийся вопрос следует ответить "y" и нажать клавишу Enter. 
В результате пользователи компьютера получат разрешение на загрузку любых .Net библиотек из указанного каталога и всех его подкаталогов.

Программный вызов CasPol.exe

    Ниже приведен код, позволяющий вызвать CasPol.exe программным способом и добавить разрешение для локального компьютера на использование библиотек, расположенных удалённо.

Код C#

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Diagnostics;
   6:  using System.Runtime.InteropServices;
   7:  using System.IO;
   8:   
   9:  namespace GetSharedLibs
  10:  {
  11:      public class Class1
  12:      {          
  13:          public static void StartSharedLibs(string sharedPath)
  14:          {             
  15:              string args = string.Format("-m -ag 1.2 -url \"{0}\" FullTrust", sharedPath);
  16:              string strFrameworkDir = RuntimeEnvironment.GetRuntimeDirectory();
  17:              string fileName = Path.Combine(strFrameworkDir, "CasPol.exe");
  18:              if (!File.Exists(fileName))
  19:              {
  20:                  Console.WriteLine("Файл {0} не найден!", fileName);
  21:                  return;
  22:              }
  23:              ProcessStartInfo procStartInfo = new ProcessStartInfo(Path.Combine(strFrameworkDir, "CasPol.exe"));
  24:              procStartInfo.Arguments = args;
  25:              procStartInfo.UseShellExecute = false;
  26:              procStartInfo.RedirectStandardInput = true;
  27:              Process proc = new Process();
  28:              proc.StartInfo = procStartInfo;
  29:              proc.Start();
  30:              StreamWriter myStreamWriter = proc.StandardInput;
  31:              //Вывод перенаправляю на консоль...
  32:              Console.SetOut(myStreamWriter);
  33:              //Отвечаю на вопрос утвердительно...
  34:              Console.WriteLine("y"); 
  35:          }
  36:      }
  37:  }

    А теперь, на примере посмотрим как это работает...

Код C#

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using GetSharedLibs;
   6:   
   7:  namespace Test
   8:  {
   9:      class Program
  10:      {
  11:          static void Main(string[] args)
  12:          {
  13:              Class1.StartSharedLibs(@"file://\\hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadLibs/*");
  14:              Console.Read();            
  15:          }
  16:      }
  17:  }

    Результат работы, получаемый нами на консоли:

Microsoft (R) .NET Framework CasPol 2.0.50727.3053
Copyright (c) Microsoft Corporation. All rights reserved.

The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
Added union code group with "-url" membership condition to the Machine level.
Success



Comments