System. Net .WebClient не обрабатывает кеш при запуске из учетной записи SYSTEM - PullRequest
0 голосов
/ 30 марта 2020

У меня проблемы с написанным мной сценарием, использующим System. Net .WebClient (вызывается из Powershell, но я думаю, что проблема должна возникать со всем, что использует тот же кэш, что и System. Net .WebRequest ):

Для контекста (поскольку может быть лучшее решение, чем то, что я нашел):

  • Я сделал расширение для IE (да, некоторые клиенты все еще используют его) в C# (да, это не рекомендуется, но у меня не было выбора)
  • это расширение должно работать с активированным EPM (с низким уровнем привилегий).
  • ему нужен файл конфигурации, который доступно на сервере, к которому обращается HTTPS.
  • конфигурация должна быть доступна при запуске IE, поэтому мы должны ее кэшировать (также каждая вкладка имеет свой экземпляр расширения)
  • эта кэшированная конфигурация должна оставаться в привилегированной папке (расширение вводит код на некоторые страницы в соответствии с этой конфигурацией, поэтому вы не хотите, чтобы пользователь или какой-либо процесс имели доступ для записи в нее) * 10 14 *

Чтобы решить проблему кэширования конфигурации, я написал скрипт Powershell, который запускается через планировщик задач. Скрипт использует System. Net .WebClient для загрузки файла, и я настроил его на кеш файла:

$webclient = New-Object System.Net.WebClient
$cacheLevel = [System.Net.Cache.RequestCacheLevel]::CacheIfAvailable
$webclient.CachePolicy = New-Object System.Net.Cache.RequestCachePolicy($cacheLevel)

Когда я запускаю скрипт с помощью «Запуск от имени администратора», кеш соблюдается (при условии, что сервер правильно настроен).

Когда я запускаю скрипт из планировщика задач (пользователь NT AUTHORITY \ SYSTEM, так как мне нужна привилегия, чтобы иметь возможность сохранять файл в директории установки расширения) , кеш не соблюдается и файл загружается каждый раз.

Есть идеи, как решить эту проблему? Мне нужно кэширование, чтобы можно было опрашивать файл без необходимости полной загрузки (файл небольшой, но количество пользователей велико: D).

Возможно, будет возможно использовать дату файла, который был ранее загружен?

...