Dela via


Få åtkomst till lokala och fjärranslutna data i ClickOnce-program

De flesta program använder eller producerar data. ClickOnce ger dig en mängd olika alternativ för att läsa och skriva data, både lokalt och via fjärranslutning.

Lokala data

Med ClickOnce kan du läsa in och lagra data lokalt med någon av följande metoder:

  • ClickOnce Data Directory

  • Isolerad lagring

  • Andra lokala filer

ClickOnce-datakatalog

Varje ClickOnce-program som installeras på en lokal dator har en datakatalog som lagras i användarens dokument- och inställningsmapp. Alla filer som ingår i ett ClickOnce-program och markeras som en "data"-fil kopieras till den här katalogen när ett program installeras. Datafiler kan vara av valfri filtyp, som oftast används som text-, XML- och databasfiler, till exempel Microsoft Access-.mdb filer.

Datakatalogen är avsedd för programhanterade data, vilket är data som programmet uttryckligen lagrar och underhåller. Alla statiska filer med icke-beroenden som inte har markerats som "data" i programmanifestet finns i stället i Programkatalogen. I den här katalogen finns programmets körbara (.exe) filer och sammansättningar.

Anmärkning

När ett ClickOnce-program avinstalleras tas även datakatalogen bort. Använd aldrig Data Directory för att lagra slutanvändarhanterade data, till exempel dokument.

Markera datafilerna i en ClickOnce-distribution

Om du vill placera en befintlig fil i datakatalogen måste du markera den befintliga filen som en datafil i ClickOnce-programmets programmanifestfil. Mer information finns i Så här: Inkludera en datafil i ett ClickOnce-program.

Läsa från och skriva till datamappen

Läsning från Data Directory kräver att din ClickOnce-applikation begär läsbehörighet; på samma sätt kräver skrivning till mappen skrivbehörighet. Programmet får automatiskt den här behörigheten om det är konfigurerat att köras med fullständigt förtroende. Mer information om hur du höjer behörigheter för ditt program med hjälp av behörighetshöjning eller distribution av betrodda program finns i Säkra ClickOnce-program.

Anmärkning

Om din organisation inte använder distribution av betrodda program och har inaktiverat behörighetshöjning misslyckas kontrollen av behörigheter.

När programmet har dessa behörigheter kan det komma åt Data Directory med hjälp av metodanrop på klasser i System.IO. Du kan hämta sökvägen till Data Directory i ett Windows Forms ClickOnce-program genom att använda DataDirectory-egenskapen som finns på CurrentDeployment-egenskapen av ApplicationDeployment. Det här är det mest praktiska och rekommenderade sättet att komma åt dina data. Följande kodexempel visar hur du gör detta för en textfil med namnet CSV.txt som du har inkluderat i distributionen som en datafil.

Anmärkning

Klassen ApplicationDeployment och API:erna System.Deployment.Application i namnområdet stöds inte i .NET Core- och .NET 5- och senare versioner. I .NET 7 stöds en ny metod för att komma åt egenskaper för programdistribution. Mer information finns i Access ClickOnce distributionsegenskaper i .NET. .NET 7 stöder inte motsvarigheten till ApplicationDeployment-metoder.

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);
    }
}

Mer information om hur du markerar filer i distributionen som datafiler finns i Så här tar du med en datafil i ett ClickOnce-program.

Du kan också hämta datakatalogsökvägen med hjälp av relevanta variabler i Application klassen, till exempel LocalUserAppDataPath.

Att manipulera andra typer av filer kan kräva ytterligare behörigheter. Om du till exempel vill använda en Access-databasfil (.mdb) måste programmet ha fullständigt förtroende för att kunna använda relevanta <xref:System.Data-klasser> .

Datakatalog och programversioner

Varje version av ett program har en egen Data Directory, som är isolerad från andra versioner. ClickOnce skapar den här katalogen oavsett om några datafiler ingår i distributionen så att programmet har en plats för att skapa nya datafiler vid körning. När en ny version av ett program installeras kopierar ClickOnce alla befintliga datafiler från den tidigare versionens Data Directory till den nya versionens Data Directory – oavsett om de ingick i den ursprungliga distributionen eller skapades av programmet.

ClickOnce ersätter den äldre versionen av filen med den nyare versionen av servern om en datafil har ett annat hashvärde i den gamla versionen av programmet som i den nya versionen. Om den tidigare versionen av programmet skapade en ny fil med samma namn som en fil som ingår i den nya versionens distribution skriver ClickOnce över den gamla versionens fil med den nya filen. I båda fallen inkluderas de gamla filerna i en underkatalog i datakatalogen med namnet .pre, så att programmet fortfarande kan komma åt gamla data i migreringssyfte.

Om du behöver mer detaljerad migrering av data kan du använda API:et ClickOnce Deployment för att utföra anpassad migrering från den gamla datakatalogen till den nya datakatalogen. Du måste testa för en tillgänglig nedladdning med hjälp av IsFirstRun, ladda ned uppdateringen med Update eller UpdateAsync, och utföra allt anpassat datamigreringsarbete på egen hand när uppdateringen är klar.

Isolerad lagring

Isolerad lagring tillhandahåller ett API för att skapa och komma åt filer med hjälp av ett enkelt API. Den faktiska platsen för de lagrade filerna är dold för både utvecklaren och användaren.

Isolerad lagring fungerar i alla versioner av .NET Framework. Isolerad lagring fungerar också i delvis betrodda program utan behov av ytterligare behörighetsbidrag. Du bör använda isolerad lagring om ditt program måste köras i delvis förtroende, men måste underhålla programspecifika data.

Anmärkning

I ClickOnce för .NET Core och .NET 5 eller senare stöds inte partiellt förtroende, som kräver kodåtkomstsäkerhet. I .NET Framework är användningen av Code Access Security inte en bra metod och rekommenderas inte.

Mer information finns i Isolerad lagring.

Andra lokala filer

Om ditt program måste arbeta med eller spara slutanvändardata, till exempel rapporter, bilder, musik och så vidare, måste FileIOPermission programmet läsa och skriva data till det lokala filsystemet.

Fjärrdata

Vid något tillfälle kommer ditt program troligen att behöva hämta information från en fjärransluten webbplats, till exempel kunddata eller marknadsinformation. I det här avsnittet beskrivs de vanligaste teknikerna för att hämta fjärrdata.

Få åtkomst till filer med HTTP

Du kan komma åt data från en webbserver med hjälp av antingen WebClient klassen eller HttpWebRequest i System.Net namnområdet. Data kan vara antingen statiska filer eller ASP.NET program som returnerar rådata eller XML-data. Om dina data är i XML-format är det snabbaste sättet att hämta data genom att använda XmlDocument klassen, vars Load metod tar en URL som argument. Ett exempel finns i Läsa ett XML-dokument i DOM.

Du måste tänka på säkerheten när ditt program kommer åt fjärrdata via HTTP. Som standard kan clickOnce-programmets åtkomst till nätverksresurser begränsas, beroende på hur programmet distribuerades. Dessa begränsningar tillämpas för att förhindra att skadliga program får åtkomst till privilegierade fjärrdata eller från att använda en användares dator för att attackera andra datorer i nätverket.

I följande tabell visas de distributionsstrategier som du kan använda och deras standardwebbbehörigheter.

Distributionstyp Standardbehörigheter för nätverk
Webbinstallation Kan bara komma åt webbservern som programmet installerades från
Installation av delad filenhet Det går inte att komma åt några webbservrar
CD-ROM Installera Kan komma åt alla webbservrar

Om ditt ClickOnce-program inte kan komma åt en webbserver på grund av säkerhetsbegränsningar måste programmet kontrollera WebPermission för den webbplatsen. Mer information om hur du ökar säkerhetsbehörigheterna för ett ClickOnce-program finns i Säkra ClickOnce-program.

Få åtkomst till data via en XML-webbtjänst

Om du exponerar dina data som en XML-webbtjänst kan du komma åt data med hjälp av en XML-webbtjänstproxy. Proxyn är en .NET Framework-klass som du skapar med hjälp av antingen Visual Studio. Xml-webbtjänstens åtgärder, till exempel att hämta kunder, göra beställningar och så vidare, exponeras som metoder på proxyn. Detta gör webbtjänster mycket enklare att använda än råtext- eller XML-filer.

Om XML-webbtjänsten fungerar via HTTP kommer tjänsten att bindas av samma säkerhetsbegränsningar som klasserna WebClient och HttpWebRequest .

Få åtkomst till en databas direkt

Du kan använda klasserna i System.Data namnområdet för att upprätta direkta anslutningar med en databasserver, till exempel SQL Server i nätverket, men du måste ta hänsyn till säkerhetsproblemen. Till skillnad från HTTP-begäranden är databasanslutningsbegäranden alltid förbjudna som standard under partiellt förtroende. du har bara sådan behörighet som standard om du installerar ClickOnce-programmet från en CD-ROM. Detta ger ditt program fullt förtroende. Om du vill aktivera åtkomst till en specifik SQL Server-databas måste ditt program begära SqlClientPermission det. Om du vill aktivera åtkomst till en annan databas än SQL Server måste den begära OleDbPermission.

För det mesta behöver du inte komma åt databasen direkt, utan i stället komma åt den via ett webbserverprogram som skrivits i ASP.NET eller en XML-webbtjänst. Att komma åt databasen på det här sättet är ofta den bästa metoden om ditt ClickOnce-program distribueras från en webbserver. Du kan komma åt servern i partiellt förtroende utan att höja programmets behörigheter.