Zabezpieczenia, przechowywanie wersji i problemy z manifestami we wdrożeniach technologii ClickOnce

Istnieją różne problemy związane z zabezpieczeniami technologii ClickOnce, przechowywaniem wersji aplikacji oraz składnią manifestu i semantykami, które mogą spowodować, że wdrożenie technologii ClickOnce nie powiedzie się.

ClickOnce i Kontrola konta użytkownika systemu Windows

W systemie Windows Vista i nowszych wersjach systemu Windows aplikacje domyślnie działają jako użytkownik standardowy, nawet jeśli bieżący użytkownik jest zalogowany przy użyciu konta z uprawnieniami administratora. Jeśli aplikacja musi wykonać akcję, która wymaga uprawnień administratora, informuje system operacyjny, który następnie monituje użytkownika o wprowadzenie poświadczeń administratora. Ta funkcja, która nosi nazwę Kontrola konta użytkownika (UAC), uniemożliwia aplikacjom wprowadzanie zmian, które mogą mieć wpływ na cały system operacyjny bez jawnego zatwierdzenia użytkownika. Aplikacje systemu Windows deklarują, że wymagają tego podniesienia uprawnień, określając requestedExecutionLevel atrybut w trustInfo sekcji manifestu aplikacji.

Ze względu na ryzyko ujawnienia aplikacji ataków podniesienia uprawnień zabezpieczeń aplikacje ClickOnce nie mogą żądać podniesienia uprawnień, jeśli kontrola konta użytkownika jest włączona dla klienta. Każda aplikacja ClickOnce, która próbuje ustawić jego requestedExecutionLevel atrybut na requireAdministrator lub highestAvailable nie zostanie zainstalowana w systemie Windows Vista i nowszych wersjach.

W niektórych przypadkach aplikacja ClickOnce może podjąć próbę uruchomienia z uprawnieniami administratora z powodu logiki wykrywania instalatora w systemie Windows. W takim przypadku można ustawić requestedExecutionLevel atrybut w manifeście aplikacji na asInvokerwartość . Spowoduje to uruchomienie samej aplikacji bez podniesienia uprawnień. Program Visual Studio automatycznie dodaje ten atrybut do wszystkich manifestów aplikacji.

Jeśli tworzysz aplikację, która wymaga uprawnień administratora przez cały okres istnienia aplikacji, rozważ wdrożenie aplikacji przy użyciu technologii Instalatora Windows (MSI). Aby uzyskać więcej informacji, zobacz Podstawy Instalatora Windows.

Przydziały aplikacji online i częściowe aplikacje zaufania

Jeśli aplikacja ClickOnce działa w trybie online zamiast przez instalację, musi mieścić się w ramach limitu przydziału przeznaczonego dla aplikacji online. Ponadto aplikacja sieciowa, która działa w częściowym zaufaniu, na przykład z ograniczonym zestawem uprawnień zabezpieczeń, nie może być większa niż połowa rozmiaru przydziału.

Aby uzyskać więcej informacji i instrukcje dotyczące zmiany limitu przydziału aplikacji online, zobacz Omówienie pamięci podręcznej ClickOnce.

Problemy z przechowywaniem wersji

Problemy mogą wystąpić, jeśli przypiszesz silne nazwy do zestawu i zwiększ numer wersji zestawu, aby odzwierciedlić aktualizację aplikacji. Każdy zestaw skompilowany z odwołaniem do zestawu o silnej nazwie musi zostać ponownie skompilowany lub zestaw spróbuje odwołać się do starszej wersji. Zestaw spróbuje to zrobić, ponieważ zestaw używa starej wartości wersji w żądaniu powiązania.

Załóżmy na przykład, że masz zestaw o silnej nazwie we własnym projekcie w wersji 1.0.0.0. Po skompilowaniu zestawu należy dodać go jako odwołanie do projektu zawierającego główną aplikację. Jeśli zaktualizujesz zestaw, zwiększ wersję do wersji 1.0.0.1 i spróbujesz ją wdrożyć bez ponownego kompilowania aplikacji, aplikacja nie będzie mogła załadować zestawu w czasie wykonywania.

Ten błąd może wystąpić tylko w przypadku ręcznego edytowania manifestów ClickOnce; Ten błąd nie powinien wystąpić w przypadku wygenerowania wdrożenia przy użyciu programu Visual Studio.

Określanie poszczególnych zestawów programu .NET Framework w manifeście

Ładowanie aplikacji nie powiedzie się, jeśli wdrożenie ClickOnce zostało ręcznie edytowane w celu odwołania się do starszej wersji zestawu .NET Framework. Jeśli na przykład dodano odwołanie do zestawu System.Net dla wersji programu .NET Framework przed wersją określoną w manifeście, wystąpi błąd. Ogólnie rzecz biorąc, nie należy próbować określać odwołań do poszczególnych zestawów programu .NET Framework, ponieważ wersja programu .NET Framework, dla której działa aplikacja, jest określana jako zależność w manifeście aplikacji.

Problemy z analizowaniem manifestu

Pliki manifestu używane przez aplikację ClickOnce to pliki XML i muszą być poprawnie sformułowane i prawidłowe: muszą przestrzegać reguł składni XML i używać tylko elementów i atrybutów zdefiniowanych w odpowiednim schemacie XML.

Coś, co może powodować problemy w pliku manifestu, wybiera nazwę aplikacji, która zawiera znak specjalny, taki jak pojedynczy lub podwójny cudzysłów. Nazwa aplikacji jest częścią tożsamości ClickOnce. Funkcja ClickOnce obecnie nie analizuje tożsamości zawierających znaki specjalne. Jeśli aktywacja aplikacji nie powiedzie się, upewnij się, że używasz tylko znaków alfabetycznych i liczbowych dla nazwy i spróbuj wdrożyć ją ponownie.

Jeśli ręcznie edytowano manifesty wdrożenia lub aplikacji, być może przypadkowo zostały one uszkodzone. Uszkodzony manifest uniemożliwi prawidłową instalację technologii ClickOnce. Takie błędy można debugować w czasie wykonywania, klikając pozycję Szczegóły w oknie dialogowym Błąd ClickOnce i odczytując komunikat o błędzie w dzienniku. Dziennik wyświetli jedną z następujących wiadomości:

  • Opis błędu składni oraz numer wiersza i położenie znaku, w którym wystąpił błąd.

  • Nazwa elementu lub atrybutu używanego z naruszeniem schematu manifestu. Jeśli kod XML został dodany ręcznie do manifestów, należy porównać dodatki do schematów manifestu. Aby uzyskać więcej informacji, zobacz Manifest wdrożenia Technologii ClickOnce i Manifest aplikacji ClickOnce.

  • Konflikt identyfikatora. Odwołania zależności we wdrożeniu i manifestach aplikacji muszą być unikatowe zarówno w ich name atrybutach, jak i publicKeyToken . Jeśli oba atrybuty są zgodne między dwoma elementami w manifeście, analizowanie manifestu nie powiedzie się.

Środki ostrożności podczas ręcznego zmieniania manifestów lub aplikacji

Podczas aktualizowania manifestu aplikacji należy ponownie podpisać manifest aplikacji i manifest wdrożenia. Manifest wdrożenia zawiera odwołanie do manifestu aplikacji, który zawiera skrót tego pliku i jego podpis cyfrowy.

Środki ostrożności dotyczące użycia dostawcy wdrożenia

Manifest wdrożenia ClickOnce ma właściwość wskazującą deploymentProvider pełną ścieżkę lokalizacji, z której ma zostać zainstalowana i obsłużona aplikacja:

<deploymentProvider codebase="http://myserver/myapp.application" />

Ta ścieżka jest ustawiana, gdy usługa ClickOnce tworzy aplikację i jest obowiązkowa dla zainstalowanych aplikacji. Ścieżka wskazuje lokalizację standardową, w której instalator ClickOnce zainstaluje aplikację i wyszuka aktualizacje. Jeśli użyjesz polecenia xcopy , aby skopiować aplikację ClickOnce do innej lokalizacji, ale nie zmienisz deploymentProvider właściwości, funkcja ClickOnce nadal będzie odwoływać się do oryginalnej lokalizacji podczas próby pobrania aplikacji.

Jeśli chcesz przenieść lub skopiować aplikację, musisz również zaktualizować deploymentProvider ścieżkę, aby klient rzeczywiście został zainstalowany z nowej lokalizacji. Aktualizowanie tej ścieżki jest głównie problemem, jeśli zainstalowano aplikacje. W przypadku aplikacji online, które są zawsze uruchamiane za pośrednictwem oryginalnego adresu URL, ustawienie deploymentProvider jest opcjonalne. Jeśli deploymentProvider jest ustawiona, zostanie ona uznana. W przeciwnym razie adres URL użyty do uruchomienia aplikacji będzie używany jako podstawowy adres URL do pobierania plików aplikacji.

Uwaga

Za każdym razem, gdy zaktualizujesz manifest, musisz również ponownie go podpisać.

Rozwiązywanie problemów z wdrożeniamitechnologii ClickOnce — bezpieczne aplikacjeClickOnce — wybieranie strategii wdrażania Technologii ClickOnce