Acesso a dados locais e remotos em aplicativos ClickOnce

A maioria dos aplicativos consome ou produz dados. O ClickOnce oferece uma variedade de opções para ler e gravar dados, local e remotamente.

Dados locais

Com o ClickOnce, você pode carregar e armazenar dados localmente usando qualquer um dos seguintes métodos:

  • Diretório de dados do ClickOnce

  • Armazenamentos isolado

  • Outros arquivos locais

Diretório de dados do ClickOnce

Cada aplicativo ClickOnce instalado em um computador local tem um diretório de dados, armazenado na pasta Documentos e Configurações do usuário. Qualquer arquivo incluído em um aplicativo ClickOnce e marcado como um arquivo de "dados" é copiado para esse diretório quando um aplicativo é instalado. Arquivos de dados podem ser de qualquer tipo, sendo os mais usados arquivos de texto, XML e aquivos de banco de dados, como arquivos .mdb do Microsoft Access.

O diretório de dados destina-se a dados gerenciados pelo aplicativo, que são dados que o aplicativo armazena e mantém explicitamente. Todos os arquivos estáticos, que não geram dependência e não marcados como "dados" no manifesto do aplicativo residirão no Diretório do Aplicativo. Esse diretório é onde residem os assemblies e arquivos executáveis do aplicativo (.exe).

Observação

Quando um aplicativo ClickOnce é desinstalado, seu Diretório de Dados também é removido. Nunca use o Diretório de Dados para armazenar dados gerenciados pelo usuário final, como documentos.

Marcar arquivos de dados em uma distribuição do ClickOnce

Para colocar um arquivo existente dentro do Diretório de Dados, você precisa marcá-lo como um arquivo de dados no arquivo de manifesto do aplicativo ClickOnce. Para obter mais informações, consulte Como incluir um arquivo de dados em um aplicativo ClickOnce.

Ler e gravar no diretório de dados

Para ler do Diretório de Dados, é necessário que o aplicativo ClickOnce solicite permissão de Leitura; da mesma forma, para gravar no diretório é necessária a permissão de Gravação. O aplicativo terá automaticamente essa permissão se estiver configurado para ser executado com Confiança Total. Para obter mais informações sobre como elevar permissões para o aplicativo usando a Elevação de Permissão ou a Implantação de Aplicativos Confiáveis, consulte Proteger aplicativos ClickOnce.

Observação

Se a organização não usar a Implantação de Aplicativo Confiável e tiver desativado a Elevação de Permissão, a declaração de permissões falhará.

Quando o aplicativo tiver essas permissões, ele poderá acessar o Diretório de Dados usando chamadas de método em classes dentro do System.IO. Você pode obter o caminho do Diretório de Dados em um aplicativo ClickOnce do Windows Forms usando a propriedade DataDirectory definida na propriedade CurrentDeployment de ApplicationDeployment. Essa é a maneira mais conveniente e recomendada de acessar os dados. O exemplo de código a seguir demonstra como fazer isso para um arquivo de texto chamado CSV.txt que você incluiu na implantação como um arquivo de dados.

Observação

A classe ApplicationDeployment e as APIs no namespace System.Deployment.Application não têm suporte no .NET Core e no .NET 5 e versões posteriores. No .NET 7, há suporte para um novo método de acesso às propriedades de implantação de aplicativos. Para obter mais informações, consulte Acessar propriedades de implantação do ClickOnce no .NET. O .NET 7 não oferece suporte ao equivalente aos métodos 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);
    }
}

Para obter mais informações sobre como marcar arquivos em sua implantação como arquivos de dados, consulte Como incluir um arquivo de dados em um aplicativo ClickOnce.

Você também pode obter o caminho do diretório de dados usando as variáveis relevantes na classe Application, como LocalUserAppDataPath.

Manipular outros tipos de arquivos pode exigir permissões adicionais. Por exemplo, se você quiser usar um arquivo de banco de dados do Access (.mdb), o aplicativo precisará declarar confiança total para usar as classes <xref:System.Data> relevantes.

Versões do diretório de dados e do aplicativo

Cada versão de um aplicativo tem o próprio Diretório de Dados, que é isolado de outras versões. O ClickOnce cria esse diretório independentemente de arquivos de dados serem incluídos na implantação para que o aplicativo tenha um local onde criar arquivos de dados em tempo de execução. Quando uma nova versão de um aplicativo é instalada, o ClickOnce copia todos os arquivos de dados existentes do Diretório de Dados da versão anterior para o Diretório de Dados da nova versão – independentemente de terem sido incluídos na implantação original ou criados pelo aplicativo.

O ClickOnce substituirá a versão mais antiga do arquivo pela versão mais recente do servidor se um arquivo de dados tiver um valor de hash diferente na versão antiga do aplicativo em relação à nova versão. Além disso, se a versão anterior do aplicativo criou um arquivo com o mesmo nome de um arquivo incluído na implantação da nova versão, o ClickOnce substituirá o arquivo da versão antiga pelo novo arquivo. Em ambos os casos, os arquivos antigos serão incluídos em um subdiretório dentro do diretório de dados chamado .pre, de modo que o aplicativo ainda possa acessar dados antigos para fins de migração.

Se você precisar de uma migração mais refinada de dados, poderá usar a API de Implantação do ClickOnce para executar a migração personalizada do antigo para o novo Diretório de Dados. Você precisará testar se um download está disponível usando IsFirstRun, baixar a atualização usando Update ou UpdateAsync e realizar qualquer trabalho de migração de dados personalizado por conta própria após a conclusão da atualização.

Armazenamento isolado

O Armazenamento Isolado fornece uma API para criar e acessar arquivos usando uma API simples. O local real dos arquivos armazenados fica oculto do desenvolvedor e do usuário.

O Armazenamento Isolado funciona em todas as versões do .NET Framework. O Armazenamento Isolado também funciona em aplicativos parcialmente confiáveis sem a necessidade de concessões de permissão adicionais. Use o Armazenamento Isolado se o aplicativo precisar ser executado em confiança parcial, mas manter dados específicos do aplicativo.

Para obter mais informações, consulte Armazenamento Isolado.

Outros arquivos locais

Se o aplicativo precisar salvar dados do usuário final ou trabalhar com eles, como relatórios, imagens, música e assim por diante, ele precisará de FileIOPermission para ler e gravar dados no sistema de arquivos local.

Dados remotos

Em algum momento, o aplicativo provavelmente precisará recuperar informações de um site remoto, como dados do cliente ou informações de mercado. Esta seção aborda as técnicas mais comuns para recuperar dados remotos.

Acessar arquivos com HTTP

Você pode acessar dados de um servidor Web usando a classe WebClient ou HttpWebRequest no namespace System.Net. Os dados podem ser arquivos estáticos ou aplicativos ASP.NET que retornam dados XML ou texto bruto. Se os dados estiverem no formato XML, a maneira mais rápida de recuperá-los será usando a classe XmlDocument, cujo método Load usa uma URL como argumento. Para ver um exemplo, consulte Ler um documento XML no DOM.

Você precisa considerar a segurança quando o aplicativo acessa dados remotos por HTTP. Por padrão, o acesso do aplicativo ClickOnce aos recursos de rede pode ser restrito, dependendo de como o aplicativo foi implantado. Essas restrições são aplicadas para impedir que programas mal-intencionados tenham acesso a dados remotos privilegiados ou usem o computador de um usuário para atacar outros computadores na rede.

A tabela a seguir lista as estratégias de implantação que você pode usar e as respectivas permissões da Web padrão.

Tipo de implantação Permissões de rede padrão
Instalação na Web Só é possível acessar o servidor Web do qual o aplicativo foi instalado
Instalação de Compartilhamento de Arquivo Não é possível acessar nenhum servidor Web
Instalação de CD-ROM Pode acessar todos os servidores Web

Se o aplicativo ClickOnce não puder acessar um servidor Web devido a restrições de segurança, o aplicativo precisará declarar WebPermission para esse site. Para obter mais informações sobre como aumentar as permissões de segurança de um aplicativo ClickOnce, consulte Proteger aplicativos ClickOnce.

Acessar dados por meio de um serviço Web XML

Se você expuser seus dados como um serviço Web XML, poderá acessá-los usando um proxy de serviço Web XML. O proxy é uma classe do .NET Framework que você cria usando o Visual Studio. As operações do serviço Web XML, como recuperar clientes, fazer pedidos e assim por diante, são expostas como métodos no proxy. Isso torna os serviços Web muito mais fáceis de usar do que texto bruto ou arquivos XML.

Se o serviço Web XML operar por HTTP, ele será associado às mesmas restrições de segurança que as classes WebClient e HttpWebRequest.

Acessar um banco de dados diretamente

Você pode usar as classes dentro do namespace System.Data para estabelecer conexões diretas com um servidor de banco de dados, como o SQL Server em sua rede, mas você precisa considerar os problemas de segurança. Diferente das solicitações HTTP, as solicitações de conexão de banco de dados sempre são proibidas por padrão sob confiança parcial; você só terá essa permissão por padrão se instalar o aplicativo ClickOnce de um CD-ROM. Isso dá confiança total ao aplicativo. Para habilitar o acesso a um banco de dados SQL Server específico, o aplicativo deve solicitar SqlClientPermission para ele. Para habilitar o acesso a um banco de dados diferente do SQL Server, ele precisa solicitar OleDbPermission.

Na maioria das vezes, você não precisará acessar o banco de dados diretamente, mas o acessará por meio de um aplicativo de servidor Web escrito em ASP.NET ou em um serviço Web XML. Frequentemente, acessar o banco de dados dessa maneira será o melhor método se o aplicativo ClickOnce for implantado de um servidor Web. Você pode acessar o servidor em confiança parcial sem elevar as permissões do aplicativo.