Sprawa za lub przeciw .NET (bestia) [zamknięta]


92

Firma, w której pracuję, korzysta z C ++ Builder 6. Od momentu powstania projektujemy kod natywny. Nasz flagowy produkt jest napisany w całości w kodzie natywnym.

Wchodzi do .NET Framework z jego dzwonkami i gwizdkami. Upadam, haczyk, linka i ciężarek. Przekonuję kierownictwo, że .NET powinien absolutnie być naszym nowym frameworkiem dla całego nowego oprogramowania i że powinniśmy jak najszybciej rozpocząć migrację naszego istniejącego kodu. Przy wszystkich zaletach nie trzeba wiele przekonywać. Przyjmują moją propozycję jak zwykle.

W tym momencie rozpoczynam tworzenie mojej pierwszej aplikacji .NET. Wszystko idzie zgodnie z planem. Projekt jest tylko jednym z elementów naszego produktu. I tak przechodzę do punktu tworzenia instalatora dla tego nowego komponentu. Jako firma jesteśmy dumni z tego, że robimy wszystko dla użytkownika tak łatwo, jak to tylko możliwe. Nawet Microsoft z tysiącami programistów nie tworzy instalatorów tak jak my. Na przykład podczas instalowania programu Microsoft CRM zostanie wyświetlona lista błędów i wymagań wstępnych, które należy zainstalować, zanim będzie można kontynuować. Nie my. Nigdy. Jeśli czegoś potrzebujesz, zainstalujemy to dla Ciebie.

To sprawia, że ​​nasze instalacje są tak łatwe. .NET Framework nie jest zainstalowany? Nie ma problemu! Zrobimy to za Ciebie. Potrzebujesz natywnego klienta SQL? W porządku!

Problem w tym, że teraz, gdy jeden komponent naszego rozwiązania jest napisany w .NET, bardzo komplikuje to proces instalacji. Zanim będę w stanie zainstalować nasz produkt, muszę wykonać następujące czynności:

  • Wykryj, czy wymaganie wstępne jest zainstalowane

  • Zainstaluj go, jeśli nie jest

  • Sprawdź, czy została pomyślnie zainstalowana

  • Następny warunek wstępny

Aby zainstalować .NET Framework, potrzebuję najpierw Instalatora Windows 4.5. Ale są różne wersje dla różnych systemów operacyjnych, więc dodaję wykrywanie systemu operacyjnego i uruchamiam poprawny plik EXE. Aha, .NET framework jest już spakowany z 2k8 i instalator exe nie może na nim działać, musisz uruchomić OCSetup.exe z parametrami, aby go zainstalować.

I tak to trwa. Następnie należy zainstalować SQL Express 2005. Zależności ponownie rosną.

Spieram się z kierownictwem, że nawet Microsoft nie ułatwia tego użytkownikowi. Odpowiadają, że nie ma powodu, abyśmy nie byli lepsi od nich w ten sposób. Nie mogę się z tym kłócić, poza tym, że uważam, że są bardzo dobre powody, dla których poszli z takim podejściem.

Nagle nasz instalator jest ogromny. Wszystkie wymagania wstępne dla .NET, nawet nie wspominając o obsłudze 64-bitowej, która ma całą osobną gamę plików EXE do zainstalowania. Więc teraz dochodzi do punktu, w którym chcemy, aby użytkownicy mogli pobrać „szybką” ocenę. Co za żart. Aby uruchomić aplikację o wielkości 30 MB, musisz pobrać 500 MB. Większość pakietu instalacyjnego to wymagania wstępne.

Kierownictwo uważa, że ​​mamy zbyt wiele zależności / wymagań wstępnych. Rozumiem całkowicie. Sugerują, abyśmy odeszli od frameworka .NET i powrócili do rodzimej krainy, gdzie wszystko było „łatwe” pod względem instalacji. W tym miejscu jedna część mnie chce stanąć w obronie platformy .NET, wyjaśniając korzyści z szerszej perspektywy, ulepszone środowisko programistyczne, łatwiejszą konserwację i ogólną jakość kodu. Druga część mnie w pełni się z nimi zgadza! Programowanie w .NET wymaga po prostu zainstalowania zbyt wielu innych wymagań wstępnych, co komplikuje instalację.

Tak, niektórzy zwolennicy .NET twierdzą, że wszystko powinno być zainstalowane w załatanym i zaktualizowanym systemie operacyjnym. To prawda, ale nie wszyscy klienci to mają i zwykłe powiedzenie „Przepraszam, najpierw zaktualizuj” po prostu nie wystarczy. Pamiętaj, że jesteśmy dumni z ogólnego doświadczenia użytkownika.

Obecnie rozważamy ponowne napisanie kodu natywnego i wiem, że tracimy pod względem szybkości programowania i wszystkich zalet .NET. Ale zyskujemy w tej dziedzinie, czy to mała, jeśli spojrzeć na szerszą perspektywę, czy nie. Ponieważ mamy umiejętności programowania natywnego, a .NET jest dla nas nowym gruntem, warto nawet cofnąć się.

Moje pytanie jest następujące: jakie jest zdanie Twojej firmy na ten temat, jeśli w ogóle jest to problem i jak będzie wyglądać uzasadnienie biznesowe, które proponuję zarządowi, zakładając, że chcę kontynuować migrację wszystkich naszych produktów do .NET?


23
+1 za piękną historię.
jgauffin

25
Czy nie ma instalatorów zastępczych dla .net, które pobierają składniki w razie potrzeby? Pakowanie pełnych instalatorów jest odpowiednie dla wydania DVD, ale jeśli pobrali wersję testową, możesz realistycznie założyć, że są online do instalacji online .net.
Rup

4
Jak na ironię, w niektórych książkach .NET, które poznałem podczas studiów, wymieniano wdrożenie XCOPY jako jedną z jego głównych zalet :)
Madhur Ahuja,

25
Zapomniałeś dołączyć swoją zależność od systemu Windows. To kolejne kilka gigabajtów. Użyj programów ładujących.
Hans Passant

13
Ciekawa historia powinna być zatytułowana: „Jak NIE zmieniać sposobu, w jaki cała firma prowadzi działalność na podstawie przeczytania niektórych materiałów marketingowych i zanim dowiesz się, co naprawdę trzeba zrobić, aby właściwie korzystać z nowego frameworka”
Andrew Barber,

Odpowiedzi:


50

To jest powód, dla którego wiele firm przeszło na instalatory internetowe, które pobierają wszystkie wymagania wstępne w locie z Twojej strony głównej. Ponieważ w większości przypadków system operacyjny ma 99% tego, co jest potrzebne (jeśli zostały zaktualizowane za pomocą usługi Windows Update).

Nie umieściłbym wszystkiego dla x64 i x32 w tym samym instalatorze. Utwórz dwa instalatory, po jednym dla każdej architektury.


2
Nie wierzę, że można pobrać pakiety instalacyjne x64 i x86 w jednej bazie danych MSI.
David Heffernan

Prawdziwe. Właśnie odpowiedziałemSuddenly, our installer is massive. All the prerequisites for .NET, not even talking about 64 bit support which has a whole seperate range of EXEs to install
jgauffin

6
DOWOLNE oprogramowanie wymaga osobnych instalatorów x86 i x64!
Jęczenie

4
abatishchev: Gdyby oprogramowanie było tylko plikiem binarnym .NET skompilowanym dla architektury „Dowolnej”, nie byłoby potrzeby oddzielnych instalacji x86 i x64. Tylko wtedy, gdy musisz zainstalować samą platformę .NET, potrzebujesz osobnych instalatorów.
Gabe

Jeśli piszesz instalator internetowy, pamiętaj o ludziach, którzy żyją za serwerami proxy. Nawet Microsoft często nie pamięta o ludziach żyjących za własnym ISA (patrzę na ciebie instalatora Web Developer).
Egor Pavlikhin

39

Paint.NET ładnie opakowuje instalację wymagań wstępnych bez domyślnego dołączania do niego platformy .NET Framework. Efektem końcowym jest niezarządzany plik wykonywalny shim, który sprawdza platformę .NET i kilka innych rzeczy i trzyma się za rękę podczas instalacji; wszystkie pobierane w locie, gdy są potrzebne. Następnie uruchamiają aplikację WinForms, która pInvokes do MSI, aby dodatkowo owinąć instalację watą.

Warto mieć Google.

Prawdopodobny jest również fakt, że na wielu komputerach klienckich jest już zainstalowana pewna wersja platformy .NET Framework, ponieważ jest ona częścią witryny Microsoft Update, co ułatwia jej wykorzystanie w świecie biznesu.

Wpisy na blogu Paint.NET dotyczące instalacji:

http://blog.getpaint.net/2008/08/24/the-paintnet-install-experience-part-1-version-3xx/

http://blog.getpaint.net/2008/08/25/the-paintnet-install-experience-part-2-version-40/ (dzięki Rup!)

Czytając nieco dokładniej historię, przypuszczalnie zarząd musiał przejść przez ból związany z wdrożeniem aplikacji C ++ przynajmniej raz, ale teraz jest to zrobione i sklasyfikowane jako „łatwe”. Poświęć trochę czasu na wdrożenie i przedstaw to kierownictwu i ukrywając ból, pokaż im, jak łatwa jest instalacja :)


Dzięki za link. Druga część to blog.getpaint.net/2008/08/25/… (nie mogłem zobaczyć linku do pierwszej na stronie, chociaż tak naprawdę jest w nagłówkach)
Rup

@ Rup nice find! Rzuciłem krótkie spojrzenie i nie zauważyłem tego. Poprawię odpowiedź, żeby to pokazać.
Adam Houldsworth

Zastanawiam się, czy istnieje instalator open source podobny do tego 4.0 dla Paint.net. Byłoby to niezwykle przydatne dla każdego, kto rozpowszechnia aplikacje .net.
dbkk

1
@dbkk mówisz mi! Paint.NET używany do wydawania kodu programu i instalatora, ale od tego czasu został zredagowany, ponieważ programy typu copy-cat nie podają informacji o autorze.
Adam Houldsworth

1
Jeśli zainstalujesz / zaktualizujesz Paint.NET przy otwartym Visual Studio, może to uszkodzić Visual Studio. Więc powiedziałbym, że ich instalator nadal potrzebuje trochę pracy.
Greg

37

Wróćmy do powodów, dla których w pierwszej kolejności chciałeś przejść z kodu natywnego na kod .NET: jest to bardziej wydajne dla Ciebie, jako programisty. Wiele rzeczy jest łatwiejszych w .NET niż w C ++ (lub jakimkolwiek innym języku ojczystym, którego używasz), dzięki czemu możesz tworzyć aplikacje znacznie szybciej.

Jak zatem wygląda czas poświęcony na tworzenie aplikacji w porównaniu z czasem spędzonym na tworzeniu instalatora? Nawet jeśli musisz spędzić kilka tygodni na przybijaniu instalatora (w szczególności części konfiguracji frameworka), powinno to być mniej więcej jedyny czas, w którym musisz przez to przejść.

W przypadku wszystkich przyszłych aplikacji używałbyś prawie identycznego instalatora; nadal sprawdzałbyś wszystkie wymagania wstępne, ale zamiast kopiować pliki do C: \ Foo, kopiujesz kilka różnych plików do C: \ bar.

Moim zdaniem jest to prosta kwestia ekonomii. Tak, opracowanie (dobrego / kompletnego) instalatora aplikacji .NET jest droższe, ale jeśli jest to krok, który trzeba wykonać raz, aby radykalnie poprawić czas tworzenia, jest to oczywiste. Twój zwrot z inwestycji prawdopodobnie wyniesie kilka tygodni.


1
+1 dobra instalacja w .NET jest trudna do ustalenia, ale jak mówisz, powinna być jednorazowa. Korzyść z posiadania większości standardowych rzeczy, których kiedykolwiek będziesz potrzebować jako System.Something.Class away jest prawie bezcenna i warta bólu głowy wywołanego przez instalatora.
Adam Houldsworth

2
Z niecierpliwością czekam na wydanie Wix Burn , wówczas pierwszego programu ładującego, który faktycznie działa (mam nadzieję). Obecnie używam DotNetInstaller wraz z NSIS. Ale ta obsługa UAC jest jeszcze daleka od ideału.
Uwe Keim

1
@Uwe Wygląda na to, że Wix Burn zostanie wydany mniej więcej w tym samym czasie co Duke Nukem Forever .
dbkk

Byłoby świetnie. Widziałem już podglądowe zrzuty ekranu z Duke Nukem Forever . Więc niedługo powinno tam być ;-)
Uwe Keim

17

Czuję, że muszę odpowiedzieć na to stwierdzenie:

Tak, niektórzy zwolennicy .NET twierdzą, że wszystko powinno być zainstalowane w załatanym i zaktualizowanym systemie operacyjnym. To prawda, ale nie wszyscy klienci to mają i zwykłe powiedzenie „Przepraszam, najpierw zaktualizuj” po prostu nie wystarczy. Pamiętaj, że jesteśmy dumni z ogólnego doświadczenia użytkownika.

Jeśli użytkownik nalega, aby strzelić sobie w stopę, obsługując system , o którym sprzedawca poinformował go, że nie nadaje się już do celu , nie można wiele zrobić, aby mu „pomóc”. Zdaję sobie sprawę, że przez to wyglądam na coś w rodzaju okropnego aktywisty, ale patrzę na to tak samo, jak rzemieślnik - to klient musi zadbać o to, aby środowisko, w którym chce, abym pracował, było solidne i odpowiednie dla produktu. Jeśli tak nie jest, zaakceptuję dalsze wynagrodzenie za wykonanie tej pracy, ale nadal może to spowodować dodatkową pracę, ponieważ nie mieli zdolności przewidywania, aby upewnić się, że rozumieją, co kupują.

Uważam, że klienci oprogramowania dostatecznie długo mogli pozostać ignorantami i teraz powinni być zobowiązani do zrozumienia, co kupują. Obsługa korporacyjnego środowiska IT, które nie jest prawidłowo załatane, jest tym samym, co kontynuowanie obsługi pojazdu, który został wycofany przez producenta - dodatek Service Pack do systemu Windows jest pod wieloma względami równoważny z wycofaniem. Nie jesteś prawnie zobowiązany do wycofania, ale leży to w twoim najlepszym interesie jako firmy i możesz zostać pociągnięty do odpowiedzialności za szkody spowodowane uchyleniem się od odpowiedzialności.


2
Twierdzę, że wspomnienia producenta są trochę przesadzone w kategoriach analogii - powiedziałbym, że bardziej przypomina to jazdę samochodem, który poprzedza poduszki powietrzne lub ABS - pojawiły się nowe funkcje poprawiające jakość i podnoszące pasek jakości. Stare rzeczy nie stają się nagle zepsute ani niebezpieczne, teraz jest po prostu akceptowane jako poniżej poprzeczki w dzisiejszych standardach, jestem pewien, że zespół Windows 95 argumentowałby, że wtedy uważali, że poprzeczka była dość wysoka! :-) Mimo to zgadzam się z tobą, nieznajomość postępu jakości nie jest cnotą.
Adam Houldsworth

11
Nie zgadzam się w 100%. Od klientów wymagano zbyt długiej wiedzy. Dlaczego powinienem wiedzieć, czy jestem x86 czy x64? Dlaczego mam wiedzieć, jakiego dodatku Service Pack używam? Pozwól, że kupię Twoje oprogramowanie, a Ty ustalisz, co musi się stać, aby zostało uruchomione. Oprogramowanie konsumenckie nieubłaganie zmierza w kierunku modelu iOS / Android / AppStore i każdy programista, który wymaga od użytkowników, aby wiedział cokolwiek innego niż najbardziej podstawowe informacje o swoim urządzeniu, zostanie pozostawiony w tyle.
kubi

1
@kubi oczywiście analogia do iOS zakłada, że ​​sprzęt się nie zmienia, ponieważ jest kontrolowany przez producenta. Komputery PC są w pełni konfigurowalne, więc wymagana jest pewna wiedza lub świadomość wymagań - lub przynajmniej świadomość potrzeby posiadania kogoś, kto wie, co robią, jest wymagana. Znam rozmiar moich opon lub oddaję samochód komuś, kto wie, czy zamierzam wymienić opony.
Adam Houldsworth,

3
@kubi: Zgadzam się z modelem zwykłego użytkownika - różnica polega na tym, że nie ma powodu, dla którego użytkownik nie delegował wszystkich problemów technicznych, takich jak wersja platformy, do i) producenta lub ii) mnie, jako programisty. Dlatego nie stanowią problemu. Użytkownik, który jest problemem, to użytkownik korporacyjny, który niekoniecznie ma wpływ na konfigurację i powinien mieć kompetentnego dostawcę IT opłaconego do rozwiązania tych problemów.
Tom W

4
Użytkownicy nie przejmują się żadnym z naszych argumentów, jakkolwiek są one rozsądne. Chcą używać twojego oprogramowania ... ale mogą zrezygnować, jeśli instalacja będzie zbyt bolesna. Nie obchodzi ich, kto jest winą - Microsoftu, dostawców czy ich własnych.
dbkk

7

Każda aplikacja Visual C ++ ma również wymagania wstępne / zależności zewnętrzne: środowisko wykonawcze 6.0, 2003, 2005, 2008 lub 2010? nie ma SP, SP1 lub SP2? x86 czy x64? Jakiej wersji Instalatora Windows wymaga 2005 SP2? A co 2008 SP1? I tak dalej, tak dalej.

Dlatego są to naciągane argumenty! Jak narzekanie Joela na .NET. I zobacz, co jest teraz !


3
+1 za link do strony Joela
Security Hound,

-1 za link do strony Joels.
Phill

Możesz łączyć się statycznie ze środowiskiem wykonawczym, więc nie potrzebujesz tych zależności.
Tony Edgecombe,

1
@Tony: Statyczne łączenie w latach dziesiątych XXI wieku? Absolute mauvais ton ;)
abatishchev

+1 za link do strony Joela
Shahid M Zubair

3

Nie widzę, dlaczego jest znacznie więcej wymagań wstępnych dla .net w porównaniu z C ++ Builder. Narzekasz na SQL Server, ale ignorujesz fakt, że musisz także zainstalować jakąś bazę danych z konstruktorem C ++. Narzekasz na x64 vs x32, ale .NET nie wymaga żadnych zmian ... ten sam plik exe działa na obu (i kompiluje się optymalnie dla obu środowisk). Tego samego nie można powiedzieć o C ++ Builder. Możesz potrzebować osobnych wersji serwera SQL, ale znowu dotyczy to konstruktora C ++ (chyba że po prostu zainstalujesz x32 na wszystkim).

Tak, występują problemy z nową wersją instalatora, ale te składniki nie są zbyt duże. Naprawdę możesz sprawić, by instalatory pobrały i zainstalowały tylko niezbędne elementy.

Konstruktor C ++ jest prawdopodobnie łatwiejszy, ponieważ zainwestowałeś już czas w stworzenie dobrego instalatora. Musisz zrobić to samo dla .NET, a następnie możesz dokonać wyboru w oparciu o rzeczywiste problemy… a nie to.

Nawiasem mówiąc, powodem, dla którego Microsoft decyduje się robić rzeczy w sposób, w jaki robią, jest to, że wielu użytkowników, zwłaszcza użytkowników korporacyjnych, nie docenia automatycznego instalowania rzeczy (być może dlatego, że mają aplikację, która zależy od określonej wersji biblioteki, przychodzisz i usuwasz go nową wersją, której nie mogą łatwo odinstalować).

To, co postrzegasz jako „ułatwianie” osobom mniej znającym się na rzeczy, w rzeczywistości sprawia, że ​​rzeczy DUŻO trudniejsze są tym, którzy wiedzą, co robią.

Oto dobry przykład. Jedną rzeczą, której absolutnie gardzę, jest to, że instaluję aplikację, która wymaga SQL Server, i instaluje ona własną instancję SQL Server, nawet jeśli mam już kilka instancji, z których mogłaby korzystać. Łatwo dla początkującego, a dla mnie wrzód na dupie, gdy próbuję sprawić, by Twoja aplikacja działała z moją pojedynczą instancją.


1

Jeśli Twoja aplikacja działa w trybie Mono, wysyłanie aplikacji za pomocą środowiska wykonawczego Mono może być mniej bolesne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.