.NET(獣)の賛否両論[終了]


92

私が働いている会社はC ++ Builder 6を使用しています。私たちは構想以来、ネイティブコードを開発してきました。当社の主力製品は完全にネイティブコードで記述されています。

ベルとホイッスルで.NET Frameworkに入ります。私は転んで、引っ掛かって、線を引いて、シンカーします。.NETはすべての新しいソフトウェア開発のための新しいフレームワークであり、既存のコードラインをできるだけ早く移行する必要があることを経営陣に納得させます。すべてのメリットがあるため、説得力はあまりありません。彼らはいつものように私の提案を受け入れます。

この時点で、最初の.NETアプリケーションの開発を開始します。それはすべて計画どおりに進んでいます。プロジェクトは、当社の製品の1つのコンポーネントにすぎません。そして、この新しいコンポーネント用のインストーラーを作成するところまでたどり着きました。会社として、私たちはユーザーのために物事をできるだけ簡単にすることに誇りを持っています。何千人もの開発者を抱えるマイクロソフトでさえ、私たちのようにインストーラーを作成しません。たとえば、Microsoft CRMをインストールすると、続行する前にインストールが必要なエラーと前提条件のリストのみが表示されます。私たちではありません。決して。何か必要な場合はインストールします。

これにより、インストールがとても簡単になります。.NET Frameworkがインストールされていませんか?問題ない!私たちはあなたのためにそれをします。SQL Native Clientが必要ですか?いいね!

問題はこれです。ソリューションの1つのコンポーネントが.NETで記述されているため、インストールプロセスが非常に複雑になっています。製品をインストールする前に、次のことを行う必要があります。

  • 前提条件がインストールされているかどうかを検出する

  • インストールされていない場合はインストールしてください

  • 正常にインストールされたことを確認します

  • 次の前提条件

.NET Frameworkをインストールするには、まずWindowsインストーラー4.5が必要です。しかし、OSごとに異なるバージョンがあるため、OS検出を追加して正しいEXEを起動します。ああ、.NETフレームワークはすでに2k8でパッケージ化されており、インストーラーexeはその上で実行できません。インストールするには、パラメーターを指定してOCSetup.exeを実行する必要があります。

そしてそれは続く。次に、SQL Express 2005をインストールする必要があります。依存関係は再び増加します。

私は、Microsoftでさえユーザーにとってこれを簡単にすることはできないと経営陣に主張します。彼らの反応は、私たちがこのように彼らより良くならない理由はないということです。彼らが彼らのアプローチを行った非常に正当な理由があると私が思うことを除いて、私はそれについて議論することはできません。

突然、私たちのインストーラは巨大になります。.NETのすべての前提条件。インストールするEXEの範囲全体が異なる64ビットのサポートについてさえ話していません。これで、ユーザーが「クイック」評価をダウンロードできるようになりました。なんて冗談でしょう。30MBのアプリケーションを実行するには、500MBをダウンロードする必要があります。インストールパッケージの大部分は前提条件です。

経営陣は、依存関係/前提条件が多すぎると感じています。私は完全に理解しています。彼らは、私たちが.NETフレームワークから離れて、インストールの点でまだ「簡単」であるネイティブの土地に戻ることを提案しています。これは、私の一部が.NETのために立ち上がって、全体像、改善された開発エクスペリエンス、容易なメンテナンス、および全体的なコード品質の利点を説明したいところです。私の他の部分は心から彼らに同意します!.NETでの開発では、インストールを複雑にする他の必須コンポーネントをインストールする必要があります。

はい、一部の.NET支持者は、すべてをパッチを適用して更新されたオペレーティングシステムにインストールする必要があると主張します。これは本当ですが、すべてのお客様がこれを持っているわけではありません。「申し訳ありませんが、最初に更新してください」と言っても問題は解決しません。ユーザーエクスペリエンス全体に誇りを持っていることを忘れないでください。

現在、ネイティブコードを再度作成することを検討しており、開発速度と.NETのすべての利点の点で私たちが失っていることを知っています。しかし、全体像を見ても小さくても、この分野で利益を得ています。ネイティブコード開発のスキルがあり、.NETは実際には私たちにとって新しい基盤であるため、前に戻ることも理にかなっています。

私の質問はこれです。この問題がまったく問題である場合、あなたの会社はこの問題についてどのように考えていますか。また、すべての製品を.NETに引き続き移行したいと仮定した場合、ビジネスケースはどのように見えますか?


23
素敵なストーリーの+1。
jgauffin 2010

25
必要に応じてコンポーネントをダウンロードする.netのスタブインストーラーはありませんか?フルインストーラーをバンドルすることは、DVDリリースに適していますが、評価版をダウンロードしている場合は、.netのオンラインインストールがオンラインであると現実的に想定できます。
Rup

4
皮肉なことに、私が大学時代に学んだ.NETの本のいくつかは、XCOPYの導入をその主な利点の1つとして述べていました:)
Madhur Ahuja

25
Windowsへの依存関係を含めるのを忘れました。これも数ギガバイトです。ブートストラップを使用します。
Hans Passant

13
興味深い話のタイトルは、「マーケティング資料を読んだ上で、新しいフレームワークを適切に使用するために本当に必要なことを学ぶ前に、会社全体のビジネスのやり方を変えてはならない」
Andrew Barber

回答:


50

これが、多くの企業がすべての前提条件をホームページからオンザフライでダウンロードするWebインストーラーに切り替えた理由です。ほとんどの場合、OSには必要なものが99%あります(Windows Updateを使用して更新されている場合)。

x64とx32のすべてを同じインストーラーに入れません。アーキテクチャごとに1つずつ、2つのインストーラーを作成します。


2
x64およびx86インストールパッケージを単一のMSIデータベースに入れることができるとは思いません。
David Heffernan

そうだね。私はちょうど応答しましたSuddenly, 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 2010

6
どのソフトウェアでも、x86とx64の別々のインストーラーが必要です!Whining ..
abatishchev

4
abatishchev:ソフトウェアが "Any"アーキテクチャ用にコンパイルされた.NETバイナリのみの場合、x86とx64を個別にインストールする必要はありません。別のインストーラーが必要なのは、.NETフレームワーク自体をインストールする必要がある場合のみです。
Gabe

Webインストーラーを作成する場合は、プロキシの背後に住む人々について覚えておいてください。マイクロソフトでさえ、自分のISAの背後に住んでいる人々について覚えていないことがよくあります(私はWeb Developerインストーラーを探しています)。
Egor Pavlikhin、2010

39

Paint.NETは、デフォルトで.NETフレームワークをバンドルすることなく、必須コンポーネントのインストールを適切にラップします。最終結果は、.NETフレームワークと他のいくつかのものをチェックし、インストールされたときにあなたの手を握る管理されていないshim実行可能ファイルです。必要に応じて、すべてオンザフライでダウンロードします。次に、MSIにpInvokedするWinFormsアプリケーションを実行して、インストールを綿ウールでさらにラップアップします。

グーグルの価値がある。

また、多くのクライアントマシンには、Microsoft Updateの一部として.NET Frameworkの一部のバージョンが既にインストールされているため、ビジネスの世界でより簡単に利用できるようになる可能性があります。

インストールに関するPaint.NETブログの投稿:

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/ (ありがとうRup!)

ストーリーをもう少し読んでください。おそらく管理者は、C ++アプリケーションを使用して少なくとも1回はデプロイメントの苦労を経験しなければなりませんでしたが、現在は実行されて「簡単」に分類されています。展開に時間をかけ、これを管理者に提示し、痛みを隠して、インストールがいかに簡単かを示します。


リンクをありがとう。2番目の部分はblog.getpaint.net/2008/08/25/…です(ページの最初のリンクは表示されませんでしたが、実際にはヘッダーにあります)
Rup

@Rup素敵な発見!私は簡単に見て、それを見つけませんでした。私はそれを示すために私の答えを修正します。
Adam Houldsworth、2010

Paint.net用の4.0に似たオープンソースインストーラーはあるのでしょうか。.netアプリを配布している人にとっては非常に便利です。
dbkk

1
@dbkkあなたは私に言っている!Paint.NETは、プログラムとインストーラーのコードをリリースするために使用されていましたが、コピーキャットプログラムが作者に信用を与えなかったため、編集されました。
Adam Houldsworth、

1
Visual Studioを開いた状態でPaint.NETをインストール/更新すると、Visual Studioが破損する可能性があります。だから私は彼らのインストーラがまだいくつかの作業を必要とすると思います。
グレッグ

37

そもそもなぜネイティブコードから.NETコードに切り替えたかったのかを振り返ってみましょう。プログラマーにとってはより効率的です。.NETの方がC ++(または使用しているネイティブ言語)よりも多くのことが簡単なので、アプリケーションをより迅速に開発できます。

次に、アプリケーションの開発に費やした時間とインストーラの開発に費やした時間をどのように比較しますか?インストーラー(具体的にはフレームワークのセットアップ部分)を2、3週間かけて調査する必要がある場合でも、それを実行する必要があるのはそれだけです。

今後のすべてのアプリケーションでは、ほぼ同じインストーラーを使用します。前提条件のチェックはすべて行いますが、ファイルをC:\ Fooにコピーする代わりに、いくつかの異なるファイルをC:\ barにコピーします。

私の意見では、これは経済学の単純な問題です。はい、.NETアプリケーション用の(良い/完全な)インストーラーを開発することはより費用がかかりますが、それが開発時間を劇的に改善するために一度行う必要があるステップである場合、それは非常に簡単です。投資収益率はおそらく数週間です。


1
.NETでの優れたインストールエクスペリエンスを特定するのは難しいですが、あなたが言うように、ワンショットである必要があります。System.Something.Classを離れて必要になる定型的なもののほとんどを使用する利点は、ほとんど価値がなく、インストーラーに起因する頭痛の種に値します。
Adam Houldsworth、2010

2
Wix Burnのリリースを楽しみにしています。実際に機能する最初のブートストラップです(私は願っています)。DotNetInstallerとNSISは、私が現在使用しているものです。しかし、そのUAC処理はまだ完全とは言えません。
Uwe Keim

1
@Uwe Wix BurnDuke Nukem Foreverとほぼ同時にリリースされるようです。
dbkk

それは素晴らしいことです。Duke Nukem Foreverのプレビュースクリーンショットを既に見ました。だからすぐにそこにあるはずです;-)
Uwe Keim 2010

17

私はこの声明に対応する必要があると感じています。

はい、一部の.NET支持者は、すべてをパッチを適用して更新されたオペレーティングシステムにインストールする必要があると主張します。これは本当ですが、すべてのお客様がこれを持っているわけではありません。「申し訳ありませんが、最初に更新してください」と言っても問題は解決しません。ユーザーエクスペリエンス全体に誇りを持っていることを忘れないでください。

ユーザーがベンダーから通知されたシステム操作して、自分の足で自分を撃つことに固執している場合、もはや目的に適さないにを「助ける」ためにできることはほとんどありません。私はこれが不愉快な活動家のように見えることを知っていますが、手動の商人がそうするのと同じ方法でそれを見てください-彼らが私に働きたい環境が確実であることを確認するのは顧客次第です音と製品に適しています。そうでない場合は、その仕事をするための追加の列挙を受け入れますが、彼らが彼らが購入しているものを理解していることを確認することを確認するための洞察力を持っていなかったため、それでも彼らは余分な仕事を引き起こす可能性があります。

ソフトウェアの顧客は十分に無知のままでいることが許されてきたと私は信じており、彼らは何を購入しているのかを理解することを今求められるべきです。適切にパッチが適用されていない企業のIT環境を運用することは、メーカーのリコールの対象となった車両を継続して稼働させることと同じです。Windowsサービスパックは、多くの点でリコールと同等です。あなたは法的にリコールを提出する義務はありませんが、それはビジネスとしてのあなたの最善の利益であり、あなたは責任の縮小によって引き起こされた損害に対して責任を負う可能性があります。


2
メーカーのリコールはアナロジーの観点から少しオーバーザトップであると主張します-おそらく、それはエアバッグやABSよりも以前の自動車を運転することに似ています-新しい機能が品質を向上させ、品質バー。古いものは突然壊れたり、危険になったりすることはありません。現在の基準では基準を下回っていると認められていますが、Windows 95チームは、当時の基準が非常に高いと思っていたと主張するでしょう。:-)それでも私はあなたに同意します、品質の進歩の無知は美徳ではありません。
Adam Houldsworth、2010

11
100%同意しません。顧客は、あまりにも長い間、知識を深める必要があります。自分がx86かx64かを知る必要があるのはなぜですか?実行しているService Packを知る必要があるのはなぜですか?ソフトウェアを購入させてください。ソフトウェアを実行するために何が必要かを考えてください。消費者向けソフトウェアは容赦なくiOS / Android / AppStoreモデルに移行しており、ユーザーにデバイスの最も基本的な詳細以外のことを知ることを要求する開発者は取り残されます。
kubi

1
@kubiもちろん、iOSの例えは、ハードウェアはベンダーが制御しているため変更されないという前提に基づいています。PCは完全に構成可能であるため、要件についてある程度の知識または認識が必要です。または、少なくとも、自分が何をしているのかを誰かが知っている必要があるという認識が必要です。タイヤのサイズを知っているか、タイヤを交換するかどうかを知っている人に車を渡す。
Adam Houldsworth 2010

3
@kubi:私はカジュアルユーザーモデルであなたに同意します-ここでの違いは、ユーザーがプラットフォームバージョンなどのすべての技術的な問題をi)製造者またはii)開発者として私に委任しない理由はないということです。したがって、それらは問題ではありません。問題となるユーザーは、構成について必ずしも発言権を持たないエンタープライズユーザーであり、有能なITプロバイダーにこれらの問題を解決するための支払いを行う必要があります。
トムW

4
ユーザーは私たちの主張を気にしませんが、健全です。彼らはあなたのソフトウェアを使いたがっています...しかし、インストールがあまりにも面倒な場合はあきらめるかもしれません。彼らは、それが誰のせいなのか-Microsoft、ベンダー、または彼ら自身のせいだ-を気にしないだろう。
dbkk

7

Visual C ++アプリには、前提条件/外部依存関係もあります:ランタイム6.0、2003、2005、2008、または2010?SP、SP1、SP2はありませんか?x86またはx64?2005 SP2にはどのバージョンのWindowsインストーラーが必要ですか?そして、2008 SP1とは?等々。

したがって、それは遠く離れた議論です!.NETに関するJoelの不平のように。そして何をしている


3
ジョエルのウェブサイトにリンクするための+1
セキュリティハウンド

JoelsのWebサイトにリンクする場合は-1。
Phill

ランタイムに静的にリンクできるため、これらの依存関係は必要ありません。
Tony Edgecombe、2011年

1
@トニー:21世紀の数十年で静的にリンクする?絶対mauvaisトン ;)
abatishchev

ジョエルのウェブサイトにリンクするための+1
Shahid M Zubair

3

C ++ Builderよりも.netの前提条件が大幅に多いのはわかりません。SQL Serverについて文句を言うが、C ++ビルダーを使用して一部のデータベースもインストールする必要があるという事実を無視します。x64とx32について文句を言いますが、.NETは変更を必要としません。C ++ Builderについても同じことが言えません。別のバージョンのSQLサーバーが必要になる場合もありますが、これはC ++ビルダーにも当てはまります(すべてにx32をインストールする場合を除く)。

はい、新しいインストーラバージョンの問題がありますが、これらのコンポーネントはそれほど大きくありません。そして、あなたは本当にインストーラーにダウンロードして、必要なaprtだけをインストールさせることができます。

C ++ビルダーは、優れたインストーラーの作成に時間を費やしているため、おそらくより簡単です。.NETについても同じことを行う必要があり、実際の問題に基づいて選択できます。これではありません。

ちなみに、Microsoftが自分たちのやり方で物事を行うことを選択した理由は、多くのユーザー、特に企業ユーザーが自動的に物事をインストールすることを好まないためです(おそらく、特定のバージョンのライブラリに依存するアプリケーションがあるため、あなたは一緒に来て、彼らが簡単にアンインストールできない新しいバージョンでそれを一掃します)。

知識の少ない人にとって「もっと簡単にする」とあなたが見ていることは、実際、彼らが何をしているかを知っている人にとって、物事をより難しくしているのです。

これが良い例です。一つは、私は絶対に軽蔑私はSQL Serverのが必要なアプリをインストールしたときであり、それは、私はすでにそれを使うことができることを、すでにいくつかのインスタンスを持っている場合でも、SQL Serverの独自のインスタンスをインストールします。初心者にとっては簡単で、お尻の痛みでアプリを1つのインスタンスで動作させることができます。


1

アプリがMonoで実行されている場合、Monoランタイムをアプリに同梱することはそれほど苦痛ではないかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.