Поделиться через


Доступ к локальным и удаленным данным в приложениях ClickOnce

Большинство приложений используют или создают данные. ClickOnce предоставляет различные варианты чтения и записи данных как локально, так и удаленно.

Локальные данные

С помощью ClickOnce можно загружать и хранить данные локально с помощью любого из следующих методов:

  • Каталог данных ClickOnce

  • Изолированное хранилище

  • Другие локальные файлы

Каталог данных ClickOnce

Каждое приложение ClickOnce, установленное на локальном компьютере, содержит каталог данных, хранящийся в папке "Документы и параметры пользователя". Любой файл, включенный в приложение ClickOnce и помеченный как файл data, копируется в этот каталог при установке приложения. Файлы данных могут быть любого типа файлов, наиболее часто используемыми в виде текстовых, XML-файлов и баз данных, таких как файлы Microsoft Access .mdb.

Директория данных предназначена для данных, управляемых приложением, которые приложение явно хранит и поддерживает. Все статические, независимые файлы, не помеченные как "данные" в манифесте приложения, будут находиться в каталоге приложений. В этом каталоге хранятся исполняемые файлы и сборки приложения (.exe).

Замечание

При удалении приложения ClickOnce его каталог данных также удаляется. Никогда не используйте каталог данных для хранения управляемых пользователем данных, таких как документы.

Пометка файлов данных в дистрибутиве ClickOnce

Чтобы поместить существующий файл в каталог данных, необходимо пометить существующий файл как файл данных в файле манифеста приложения ClickOnce. Дополнительные сведения см. в разделе "Практическое руководство. Включение файла данных в приложение ClickOnce".

Чтение и запись в каталог данных

Для чтения из каталога данных требуется разрешение на чтение приложения ClickOnce; Аналогичным образом, для записи в каталог требуется разрешение на запись. Приложение будет автоматически иметь это разрешение, если оно настроено на запуск с полным доверием. Дополнительные сведения о повышении разрешений для приложения с помощью повышения прав разрешений или доверенного развертывания приложений см. в разделе "Безопасные приложения ClickOnce".

Замечание

Если ваша организация не использует развертывание доверенных приложений и отключила повышение уровня разрешений, утверждение разрешений завершится ошибкой.

После получения этих разрешений, приложение может получить доступ к каталогу данных с помощью вызовов методов для классов в пределах System.IO. Путь к каталогу данных в приложении ClickOnce на платформе Windows Forms можно получить с помощью свойства DataDirectory, определенного в свойстве CurrentDeploymentApplicationDeployment. Это самый удобный и рекомендуемый способ доступа к данным. В следующем примере кода показано, как это сделать для текстового файла с именемCSV.txt , который вы включили в развертывание в качестве файла данных.

Замечание

Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

if (ApplicationDeployment.IsNetworkDeployed)
{
    try
    {
        using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
        {
            MessageBox.Show(sr.ReadToEnd());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not read file. Error message: " + ex.Message);
    }
}

Дополнительные сведения о маркировке файлов в развертывании в качестве файлов данных см. в разделе "Практическое руководство. Включение файла данных в приложение ClickOnce".

Путь к каталогу данных также можно получить с помощью соответствующих переменных класса Application , например LocalUserAppDataPath.

Для управления другими типами файлов может потребоваться дополнительное разрешение. Например, если вы хотите использовать файл базы данных Access (.mdb), приложение должно подтвердить полное доверие, чтобы использовать соответствующие <классы xref:System.Data> .

Каталог данных и версии приложений

Каждая версия приложения имеет собственный каталог данных, изолированный от других версий. Каталог создается ClickOnce независимо от того, есть ли файлы данных в деплойменте, так что у приложения есть место для создания новых файлов данных в процессе выполнения. При установке новой версии приложения ClickOnce копирует все существующие файлы данных из каталога данных предыдущей версии в каталог данных новой версии, независимо от того, были ли они включены в исходное развертывание или созданы приложением.

ClickOnce заменит старую версию файла более новой версией сервера, если файл данных имеет другое хэш-значение в старой версии приложения, как и в новой версии. Кроме того, если более ранняя версия приложения создала новый файл с тем же именем, что и файл, включенный в развертывание новой версии, ClickOnce перезапишет файл старой версии новым файлом. В обоих случаях старые файлы будут включены в подкаталог в именованном .preкаталоге данных, чтобы приложение по-прежнему могли получать доступ к старым данным в целях миграции.

Если требуется более детальное перемещение данных, можно использовать API развертывания ClickOnce для выполнения пользовательской миграции из старого каталога данных в новый каталог данных. Вы должны будете проверить наличие доступной загрузки, используя IsFirstRun, скачать обновление, используя Update или UpdateAsync, и выполнить любую пользовательскую миграцию данных после завершения обновления.

Изолированное хранилище

Изолированное хранилище предоставляет API для создания и доступа к файлам с помощью простого API. Фактическое расположение сохраненных файлов скрыто как от разработчика, так и от пользователя.

Изолированное хранилище работает во всех версиях .NET Framework. Изолированное хранилище также работает в частично доверенных приложениях без необходимости предоставления дополнительных разрешений. Следует использовать изолированное хранилище, если приложение должно работать в частичном доверии, но должно поддерживать данные, относящиеся к приложению.

Замечание

В ClickOnce для .NET Core и .NET 5 или более поздней версии частичное доверие, для которого требуется безопасность доступа к коду, не поддерживается. В .NET Framework использование безопасности доступа к коду не является передовой практикой и не рекомендуется.

Дополнительные сведения см. в разделе "Изолированное хранилище".

Другие локальные файлы

Если приложение должно работать с данными конечных пользователей, такими как отчеты, изображения, музыка и т. д., приложение будет требовать FileIOPermission чтения и записи данных в локальную файловую систему.

Удаленные данные

В какой-то момент ваше приложение, скорее всего, потребуется получить информацию с удаленного веб-сайта, например данные клиента или сведения о рынке. В этом разделе рассматриваются наиболее распространенные методы получения удаленных данных.

Доступ к файлам с помощью HTTP

Доступ к данным с веб-сервера можно получить с помощью WebClient класса или HttpWebRequest класса в System.Net пространстве имен. Эти данные могут быть статическими файлами или ASP.NET приложениями, возвращающими необработанный текст или XML-данные. Если данные в формате XML, самый быстрый способ извлечения данных осуществляется с помощью XmlDocument класса, метод которого Load принимает URL-адрес в качестве аргумента. Пример см. в разделе "Чтение XML-документа" в DOM.

Необходимо учитывать безопасность, когда приложение обращается к удаленным данным по протоколу HTTP. По умолчанию доступ приложения ClickOnce к сетевым ресурсам может быть ограничен в зависимости от способа развертывания приложения. Эти ограничения применяются, чтобы запретить вредоносным программам получать доступ к привилегированным удаленным данным или использовать компьютер пользователя для атаки на другие компьютеры в сети.

В следующей таблице перечислены стратегии развертывания, которые можно использовать, и их веб-разрешения по умолчанию.

Тип развертывания Разрешения сети по умолчанию
Веб-установка Доступ к веб-серверу, с которого было установлено приложение
Установка файлового обмена Не удается получить доступ к веб-серверам
установка CD-ROM Доступ к любым веб-серверам

Если приложение ClickOnce не может получить доступ к веб-серверу из-за ограничений безопасности, приложение должно задать WebPermission для этого веб-сайта. Дополнительные сведения о повышении разрешений безопасности для приложения ClickOnce см. в разделе "Безопасные приложения ClickOnce".

Доступ к данным через веб-службу XML

Если вы предоставляете данные в виде веб-службы XML, вы можете получить доступ к данным с помощью прокси-сервера веб-службы XML. Прокси-сервер — это класс .NET Framework, создаваемый с помощью Visual Studio. Операции веб-службы XML, такие как извлечение клиентов, размещение заказов и т. д., предоставляются в качестве методов на прокси-сервере. Это упрощает использование веб-служб, чем необработанные текстовые или XML-файлы.

Если веб-служба XML работает по протоколу HTTP, служба будет привязана такими же ограничениями безопасности, как классы WebClient и HttpWebRequest.

Доступ к базе данных напрямую

Классы в System.Data пространстве имен можно использовать для установления прямых подключений к серверу базы данных, например SQL Server в сети, но необходимо учитывать проблемы безопасности. В отличие от HTTP-запросов, запросы на подключение к базе данных всегда запрещаются по умолчанию при частичном доверии; По умолчанию у вас будет только такое разрешение, если вы устанавливаете приложение ClickOnce из компакт-диска. Это дает приложению полное доверие. Чтобы предоставить доступ к конкретной базе данных SQL Server, приложение должно запросить SqlClientPermission к ней; чтобы предоставить доступ к базе данных, отличной от SQL Server, приложение должно запросить OleDbPermission.

Большую часть времени вам не придется обращаться к базе данных напрямую, но будет обращаться к ней через веб-серверное приложение, написанное в ASP.NET или веб-службе XML. Доступ к базе данных таким образом часто является лучшим способом, если приложение ClickOnce развертывается с веб-сервера. Вы можете получить доступ к серверу в частичном доверии, не повышая разрешения приложения.