Pytanie Pułapki / pułapki wdrożenia ClickOnce / smart-client w .NET [zamknięte]


Mam kilka .NET Windows Forms aplikacje, które przygotowuję się do konwersji na ClickOnce/ scenariusz wdrażania inteligentnego klienta. Czytałem nie-te-świetne samouczki, ale czy są pułapki czy "grzędy", o których powinienem wiedzieć?

Dostępnych jest kilka mniejszych aplikacji, ale główna aplikacja jest w języku C #, działa 24 godziny na dobę, jest dość duża, ale zmienia się co kilka tygodni. Zapisuje również do pliku dziennika lokalnie i rozmawia z lokalnymi urządzeniami sprzętowymi.


31
2017-09-29 17:16


pochodzenie


zamknięta jako "nie jest konstruktywna" - jednak odpowiedzi na to pytanie były dla mnie niezwykle pomocne ... w decyzji o rezygnacji z wdrożenia ClickOnce;) - Steven A. Lowe
Czytam wielu ludzi narzekających na clickonce, rzeczy się zmieniły od tego czasu, nie pozwól, aby ta odpowiedź Cię zastraszyła, jest łatwa do skonfigurowania i ma dobre zalety - meda


Odpowiedzi:


Oto kilka, których jestem świadomy.

  1. Nie można umieścić ikony na pulpicie.  Możesz teraz.

  2. Nie mogę zainstalować dla wszystkich użytkowników.

  3. Muszę przeskoczyć przez obręcze, aby przenieść wdrożenie na inny serwer. Nie stanowi to problemu, jeśli rozwijasz się wewnętrznie, a użytkownicy mogą zobaczyć serwer, do którego publikujesz lub wdrażasz w publicznej sieci, ale nie jest to wspaniałe, jeśli musisz osobno wdrożyć do wielu stron klientów.

  4. Od .NETTO 3.5 Dodatek SP1 nie wymaga już podpisywania manifestu wdrażania, co znacznie ułatwia przenoszenie wdrożeń na nowe serwery.

  5. Nie mogę zainstalować złożeń w GAC. Możesz obejść to, tworząc regularne pakiety instalacyjne, które są wstępnymi wymaganiami aplikacji ClickOnce.


12
2017-09-29 17:21



Nie można zmienić wygasłego klucza podpisu (bez ponownej instalacji), chyba że korzystasz z .NET 3.5 SP1. - Roman Starkov
Właściwie możesz przenieść go na inny serwer, publikując go z nowym adresem URL aktualizacji (patrz robindotnet.wordpress.com/2010/01/17/...). Można instalować zestawy w GAC, umieszczając je w pakiecie instalacyjnym i instalacyjnym i wdrażając je jako warunek wstępny. - RobinDotNet
@RobinDotNet Nie jest łatwo łatwo opublikować dane z naszego środowiska kompilacji bezpośrednio na wewnętrznym serwerze wielu klientów. W każdym razie .net3.5 sp1 naprawił wszystkie moje problemy, usuwając wymaganie podpisania. - Darrel Miller
@RobinDotNet Czy użytkownik potrzebuje uprawnień administratora, aby zainstalować wstępne wymagania? - Darrel Miller
Tak, użytkownik potrzebuje uprawnień administratora, aby zainstalować wymagania wstępne - RobinDotNet


  • Po wdrożeniu aktualizacji wbudowane okno dialogowe sprawi, że będzie wyglądać tak, jakby cała aplikacja była ponownie pobierana. W rzeczywistości pobierane są tylko zmienione biblioteki DLL, a wyświetlany pasek postępu jest mylący / błędny. Nie marnuj czasu, próbując dowiedzieć się, dlaczego wszystkie zespoły są ponownie rozmieszczane, aby odkryć, że tak naprawdę nie są. Nie, że to zrobiłem, czy coś.
  • Kiedy certyfikat, który został użyty do podpisania oryginalnego manifestu wdrażania, wygasa, a otrzymasz nowy, czeka cię świat pełen cierpienia (klienci będą musieli odinstalować i zainstalować ponownie). Detale są w ustach konia.

9
2017-11-16 04:39





Większość problemów została rozwiązana, ale kilka osób wspomniało, że nie jest w stanie utworzyć skrótu na pulpicie. W rzeczywistości ty mogą Utwórz skrót na pulpicie przy użyciu programu Visual Studio 2008 SP1.

Ponadto, jeśli nie używasz najnowszej wersji programu Visual Studio, zawsze możesz napisz kod, aby utworzyć skrót do zainstalowanego skrótu menu startowego.


7
2017-09-30 14:11



Chociaż, niestety, nie zostanie ono całkowicie odinstalowane. - Roman Starkov


Mieliśmy aplikację, którą zamierzaliśmy wdrożyć jako aplikację ClickOnce. Potrzebowaliśmy użytkownika, aby móc zmodyfikować niektóre ustawienia w instalacji (takie jak ścieżka wdrożenia - dział informatyczny chce wyświetlać pliki z ich udziału sieciowego, nieznany w czasie kompilacji). Po zmianie dowolnego z plików we wdrożeniu należy ponownie obliczyć wszystkie hasze i ponownie podpisać wszystko. Jeśli więc to rozwiązanie jest wewnętrzne, możesz nie mieć problemów z przekazywaniem certyfikatu podpisującego, ale jeśli jest to rozwiązanie dla klientów, musisz zaprojektować wymyślne rozwiązanie, aby ominąć ten problem.

Słyszałem pogłoski skądś w Internecie, że przyszła wersja ClickOnce usunie część tego bólu głowy.


6
2017-09-29 17:23



Mam nadzieję, że usłyszane pogłoski są poprawne ... to dla nas ogromny problem! - Aaron


Nie można po cichu odinstalować wdrożonych aplikacji ClickOnce. Myślę też, że nie można dodać parametrów do skrótu startowego.


4
2017-11-28 08:25





Jedną z pułapek z ClickOnce jest fakt, że nie można zainstalować na GAC. Jest to problem, jeśli chcesz zainstalować wiele aplikacji, które współużytkują pliki DLL. Każda aplikacja będzie wymagać lokalnej kopii plików DLL. Również wiele instalacji użytkownika jest niedostępnych. Widzieć lista porównująca instalator okien z ClickOnce.


4
2017-09-29 17:22



Jeśli biblioteki dll są silnie nazwane, ClickOnce je buforuje. Więc jeśli masz wiele aplikacji, które używają tego samego dll (mamy kilka, w tym log4net), ClickOnce będzie przechowywać tylko jedną kopię w pamięci podręcznej. - RobinDotNet


Nie wiedziałem, że dodatek SP1 pozwoli ci utworzyć ikonę na pulpicie. Oto, jak to robimy (obecnie znana jako "twarda droga"):

            try
        {
            string company = string.Empty;
            string product = string.Empty;
            if (Attribute.IsDefined(asm, typeof(AssemblyCompanyAttribute)))
            {
                AssemblyCompanyAttribute asCompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute));
                company = asCompany.Company;
            }
            if (Attribute.IsDefined(asm, typeof(AssemblyProductAttribute)))
            {
                AssemblyProductAttribute asProduct = (AssemblyProductAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyProductAttribute));
                product = asProduct.Product;
            }
            if (!string.IsNullOrEmpty(company) && !string.IsNullOrEmpty(product))
            {
                string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
                    product + ".appref-ms");
                string shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
                    Path.Combine(company, product + ".appref-ms"));
                File.Copy(shortcutPath, desktopPath, true);
            }
        }
        catch 
        {
            // Shortcut could not be created
        }

3
2018-02-12 16:08



SP1 czego? .NET 3.5? - Peter Mortensen


Jeśli ktoś o tym wspomniał podczas wyszukiwania, znaleźliśmy wielu klientów zainteresowanych brakiem bezpieczeństwa "dystrybucji" ich aplikacji. Aplikacja musi być dostępna w publicznej lokalizacji - bez uwierzytelniania - aby mogła sprawdzić dostępność aktualizacji. Jedyny wyjątek dotyczy uwierzytelniania systemu Windows NT. Myślę Zabezpieczanie aplikacji ClickOnce wyjaśnia co mam na myśli.

Ikony pulpitu są dość banalne do zrobienia za pomocą kodu, i jak wspomniano, z 3.5 SP1, upieczony - więc to już nie jest problem.

W przypadku xmlSerializer nadal występuje nieutrwalony błąd - w niektórych przypadkach nie jest prawidłowo wdrażany. Łatwym rozwiązaniem jest ręczne dodanie tego pliku do wdrożenia. PITA, ale to dość łatwe ... To może być szokujące, gdy twoje wdrożenie nagle zawodzi ...


3
2017-11-16 04:23





Jest wiele rzeczy, których nie można zrobić z aplikacjami ClickOnce, takimi jak instalowanie skrótu na pulpicie użytkownika lub w aplikacji, w której aplikacja jest instalowana. Dla niektórych osób są to tzw. Dealbreakers.

Minęło trochę czasu, odkąd go użyłem, ale istnieje specjalny sposób na wykrycie i wyświetlenie numeru ClickOnce / numeru kompilacji, który jest oddzielny od wersji / numeru wersji aplikacji. Trzeba wykonać próbę / catch i jeśli wersja ClickOnce / numer kompilacji zgłasza wyjątek, aplikacja nie działa jako aplikacja wdrożona ClickOnce (to znaczy działa jako aplikacja skompilowana regularnie lub z programu Visual Studio).

Dla aplikacji, która jest prosta (czyli nie Microsoft Word, ale raczej szybka i brudna aplikacja do zrobienia czegoś) i wymaga wielu regularnych wdrożeń, ClickOnce jest świetny. Ale raczej szybko uderzysz w ścianę "och, to nie może być zrobione przez ClickOnce, proszę wybierz MSI lub coś innego).


3
2017-09-29 17:23



Zamiast używać polecenia Try / Catch podczas próby uzyskania numeru wersji wdrożonej, umieść go w "If System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed Then ...". Znacznie czystsze. Jeśli jest to sieć, możesz pobrać wersję. Jeśli nie, nie możesz. Bułka z masłem :) - Kevin Fairchild