Uzyskiwanie dostępu do danych lokalnych i zdalnych w aplikacjach ClickOnce

Większość aplikacji zużywa lub generuje dane. ClickOnce oferuje różne opcje odczytywania i zapisywania danych zarówno lokalnie, jak i zdalnie.

Dane lokalne

Za pomocą technologii ClickOnce można ładować i przechowywać dane lokalnie przy użyciu dowolnej z następujących metod:

  • Katalog danych ClickOnce

  • Izolowany magazyn

  • Inne pliki lokalne

Katalog danych ClickOnce

Każda aplikacja ClickOnce zainstalowana na komputerze lokalnym ma katalog danych przechowywany w folderze Documents i Ustawienia użytkownika. Wszystkie pliki zawarte w aplikacji ClickOnce i oznaczone jako "dane" są kopiowane do tego katalogu po zainstalowaniu aplikacji. Pliki danych mogą być dowolnym typem pliku, najczęściej używane pliki tekstowe, XML i bazy danych, takie jak pliki .mdb programu Microsoft Access.

Katalog danych jest przeznaczony dla danych zarządzanych przez aplikację, czyli danych, które aplikacja jawnie przechowuje i utrzymuje. Wszystkie statyczne pliki niezależności, które nie są oznaczone jako "dane" w manifeście aplikacji, zamiast tego będą znajdować się w katalogu aplikacji. W tym katalogu znajdują się pliki wykonywalne (.exe) aplikacji i zestawy.

Uwaga

Po odinstalowaniu aplikacji ClickOnce jej katalog danych również zostanie usunięty. Nigdy nie używaj usługi Data Directory do przechowywania danych zarządzanych przez użytkownika końcowego, takich jak dokumenty.

Oznaczanie plików danych w dystrybucji ClickOnce

Aby umieścić istniejący plik w usłudze Data Directory, musisz oznaczyć istniejący plik jako plik danych w pliku manifestu aplikacji aplikacji ClickOnce. Aby uzyskać więcej informacji, zobacz How to: Include a data file in a ClickOnce application (Instrukcje: dołączanie pliku danych do aplikacji ClickOnce).

Odczytywanie i zapisywanie w katalogu danych

Odczyt z katalogu danych wymaga, aby aplikacja ClickOnce zażądała uprawnienia do odczytu; podobnie zapisywanie w katalogu wymaga uprawnień do zapisu. Aplikacja będzie automatycznie mieć to uprawnienie, jeśli zostanie skonfigurowane do uruchamiania z pełnym zaufaniem. Aby uzyskać więcej informacji na temat podnoszenia uprawnień dla aplikacji przy użyciu podniesienia uprawnień lub zaufanego wdrożenia aplikacji, zobacz Bezpieczne aplikacje ClickOnce.

Uwaga

Jeśli Twoja organizacja nie korzysta z wdrożenia zaufanej aplikacji i wyłączyła podniesienie uprawnień, potwierdzenie uprawnień zakończy się niepowodzeniem.

Gdy aplikacja ma te uprawnienia, może uzyskać dostęp do usługi Data Directory przy użyciu wywołań metod dla klas w ramach System.IOklasy . Ścieżkę katalogu danych można uzyskać w aplikacji ClickOnce formularzy systemu Windows przy użyciu DataDirectory właściwości zdefiniowanej ApplicationDeploymentwe CurrentDeployment właściwości . Jest to najwygodniejszy i zalecany sposób uzyskiwania dostępu do danych. W poniższym przykładzie kodu pokazano, jak to zrobić dla pliku tekstowego o nazwie CSV.txt , który został uwzględniony we wdrożeniu jako plik danych.

Uwaga

Klasy ApplicationDeployment i interfejsy API w System.Deployment.Application przestrzeni nazw nie są obsługiwane w wersjach .NET Core i .NET 5 i nowszych. W programie .NET 7 jest obsługiwana nowa metoda uzyskiwania dostępu do właściwości wdrażania aplikacji. Aby uzyskać więcej informacji, zobacz Access ClickOnce deployment properties in .NET (Uzyskiwanie dostępu do właściwości wdrożenia ClickOnce na platformie .NET). Platforma .NET 7 nie obsługuje odpowiedników metod 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);
    }
}

Aby uzyskać więcej informacji na temat oznaczania plików we wdrożeniu jako plików danych, zobacz Instrukcje: dołączanie pliku danych do aplikacji ClickOnce.

Ścieżkę katalogu danych można również uzyskać przy użyciu odpowiednich zmiennych w Application klasie, takich jak LocalUserAppDataPath.

Manipulowanie innymi typami plików może wymagać dodatkowych uprawnień. Jeśli na przykład chcesz użyć pliku bazy danych programu Access (.mdb), aplikacja musi potwierdzić pełne zaufanie, aby używać odpowiednich <klas xref:System.Data> .

Katalog danych i wersje aplikacji

Każda wersja aplikacji ma własny katalog danych, który jest odizolowany od innych wersji. ClickOnce tworzy ten katalog niezależnie od tego, czy jakiekolwiek pliki danych są uwzględnione we wdrożeniu, tak aby aplikacja mogła tworzyć nowe pliki danych w czasie wykonywania. Po zainstalowaniu nowej wersji aplikacji firma ClickOnce skopiuje wszystkie istniejące pliki danych z katalogu danych poprzedniej wersji do katalogu danych nowej wersji — niezależnie od tego, czy zostały uwzględnione w oryginalnym wdrożeniu, czy utworzone przez aplikację.

ClickOnce zastąpi starszą wersję pliku nowszą wersją serwera, jeśli plik danych ma inną wartość skrótu w starej wersji aplikacji, jak w nowej wersji. Ponadto jeśli wcześniejsza wersja aplikacji utworzyła nowy plik o takiej samej nazwie jak plik uwzględniony we wdrożeniu nowej wersji, funkcja ClickOnce zastąpi plik starej wersji nowym plikiem. W obu przypadkach stare pliki zostaną uwzględnione w podkatalogu w katalogu danych o nazwie .pre, aby aplikacja mogła nadal uzyskiwać dostęp do starych danych na potrzeby migracji.

Jeśli potrzebujesz bardziej szczegółowej migracji danych, możesz użyć interfejsu API wdrażania ClickOnce do przeprowadzenia migracji niestandardowej ze starego katalogu danych do nowego katalogu danych. Konieczne będzie przetestowanie dostępnego pobierania przy użyciu polecenia IsFirstRun, pobranie aktualizacji przy użyciu programu Update lub UpdateAsynci wykonywanie dowolnej niestandardowej migracji danych samodzielnie po zakończeniu aktualizacji.

Wydzielona pamięć masowa

Usługa Isolated Storage udostępnia interfejs API do tworzenia i uzyskiwania dostępu do plików przy użyciu prostego interfejsu API. Rzeczywista lokalizacja przechowywanych plików jest ukryta zarówno dla dewelopera, jak i użytkownika.

Izolowany magazyn działa we wszystkich wersjach programu .NET Framework. Izolowany magazyn działa również w częściowo zaufanych aplikacjach bez konieczności dodatkowych dotacji uprawnień. Należy użyć magazynu izolowanego, jeśli aplikacja musi działać w częściowym zaufaniu, ale musi obsługiwać dane specyficzne dla aplikacji.

Aby uzyskać więcej informacji, zobacz izolowany magazyn.

Inne pliki lokalne

Jeśli aplikacja musi pracować z danymi użytkownika końcowego, takimi jak raporty, obrazy, muzyka itd., aplikacja musi FileIOPermission odczytywać i zapisywać dane w lokalnym systemie plików.

Dane zdalne

W pewnym momencie aplikacja prawdopodobnie będzie musiała pobrać informacje ze zdalnej witryny sieci Web, takiej jak dane klienta lub informacje o rynku. W tej sekcji omówiono najbardziej typowe techniki pobierania danych zdalnych.

Uzyskiwanie dostępu do plików za pomocą protokołu HTTP

Dostęp do danych z serwera sieci Web można uzyskać przy użyciu WebClient klasy lub HttpWebRequest w System.Net przestrzeni nazw. Dane mogą być plikami statycznych lub aplikacjami ASP.NET, które zwracają nieprzetworzone dane tekstowe lub XML. Jeśli dane są w formacie XML, najszybszym sposobem pobrania danych jest użycie XmlDocument klasy , której Load metoda przyjmuje adres URL jako argument. Aby zapoznać się z przykładem, zobacz Odczytywanie dokumentu XML do modelu DOM.

Należy wziąć pod uwagę zabezpieczenia, gdy aplikacja uzyskuje dostęp do danych zdalnych za pośrednictwem protokołu HTTP. Domyślnie dostęp aplikacji ClickOnce do zasobów sieciowych może być ograniczony w zależności od sposobu wdrożenia aplikacji. Te ograniczenia są stosowane w celu uniemożliwienia złośliwym programom uzyskania dostępu do uprzywilejowanych danych zdalnych lub używania komputera użytkownika do ataku na inne komputery w sieci.

W poniższej tabeli wymieniono strategie wdrażania, których można użyć, oraz ich domyślne uprawnienia sieci Web.

Typ wdrożenia Domyślne uprawnienia sieciowe
Instalacja sieci Web Może uzyskiwać dostęp tylko do serwera sieci Web, z którego zainstalowano aplikację
Instalacja udziału plików Nie można uzyskać dostępu do żadnych serwerów sieci Web
Instalacja dysku CD-ROM Może uzyskiwać dostęp do dowolnych serwerów sieci Web

Jeśli aplikacja ClickOnce nie może uzyskać dostępu do serwera sieci Web z powodu ograniczeń zabezpieczeń, aplikacja musi potwierdzić WebPermission tę witrynę sieci Web. Aby uzyskać więcej informacji na temat zwiększania uprawnień zabezpieczeń dla aplikacji ClickOnce, zobacz Secure ClickOnce applications (Zabezpieczanie aplikacji ClickOnce).

Uzyskiwanie dostępu do danych za pośrednictwem usługi sieci Web XML

Jeśli uwidaczniasz dane jako usługę sieci Web XML, możesz uzyskać dostęp do danych przy użyciu serwera proxy usługi sieci Web XML. Serwer proxy jest klasą programu .NET Framework utworzoną przy użyciu programu Visual Studio. Operacje usługi sieci Web XML — takie jak pobieranie klientów, składanie zamówień itd. — są udostępniane jako metody na serwerze proxy. Dzięki temu usługi sieci Web są znacznie łatwiejsze w użyciu niż nieprzetworzone pliki tekstowe lub XML.

Jeśli usługa sieci Web XML działa za pośrednictwem protokołu HTTP, usługa będzie powiązana z tymi samymi ograniczeniami zabezpieczeń co WebClient klasy i HttpWebRequest .

Bezpośredni dostęp do bazy danych

Klasy w System.Data przestrzeni nazw umożliwiają nawiązywanie bezpośrednich połączeń z serwerem bazy danych, takim jak program SQL Server w sieci, ale należy uwzględnić problemy z zabezpieczeniami. W przeciwieństwie do żądań HTTP żądania połączenia bazy danych są domyślnie zabronione w ramach częściowego zaufania; Takie uprawnienia będą domyślnie dostępne tylko w przypadku zainstalowania aplikacji ClickOnce z dysku CD-ROM. Zapewnia to aplikacji pełne zaufanie. Aby umożliwić dostęp do określonej bazy danych programu SQL Server, aplikacja musi zażądać do niej żądania SqlClientPermission ; aby umożliwić dostęp do bazy danych innej niż program SQL Server, musi zażądać żądania OleDbPermission.

Przez większość czasu nie będzie trzeba uzyskiwać bezpośredniego dostępu do bazy danych, ale będzie uzyskiwać do niej dostęp za pośrednictwem aplikacji serwera sieci Web napisanej w ASP.NET lub usłudze sieci Web XML. Uzyskiwanie dostępu do bazy danych w ten sposób jest często najlepszą metodą, jeśli aplikacja ClickOnce jest wdrażana z serwera sieci Web. Dostęp do serwera można uzyskać w częściowym zaufaniu bez zwiększania uprawnień aplikacji.