MSIファイルを使用する企業の利点


57

通常のsetup.exeファイルよりも.msiファイルを使用する利点は何ですか?

ユーザーがほとんど権限を持たないマシンでは展開は簡単ですが、詳細についてはよくわかりません。

msiexec.exeには、setup.exeシナリオを使用するよりも簡単に展開できる機能がありますか?

.msiアプリケーションを展開する際のヒントやコツはありますか?

回答:


42

いくつかの利点:

  • アドバタイズできます(オンデマンドインストールが可能になるように)。
  • 広告と同様に、機能はユーザーが使用を試みるとすぐにインストールできます。
  • 状態管理が維持されるため、Windowsインストーラーは、管理者がアプリケーションがコンピューターにインストールされているかどうかを確認する方法を提供します。
  • インストールが失敗した場合にロールバックする機能。

エンタープライズ環境でソフトウェアを展開するとき、MSIを介してソフトウェアを展開することはほとんど楽しいと思います。対照的に、私はほとんどの場合、ソフトウェアが別のコンテナにある場合にソフトウェアを展開することを恐れています。

MSIインストールの操作に関する追加情報についてmsiexecは、[実行]ダイアログに入力してください。


3
+1-'09年には見られなかった(サイトはまだベータ版だったと思う)が、「...私はほとんど常に恐怖を感じる...」ビットが大好きです。私は完全にそのよう感じます(公平を期すために、一部の「MSI」は私に同じように感じさせます... Java ... Google Chrome ...)。
エヴァンアンダーソン

74

2018年7月の更新:以下の情報の非常に圧縮された要約がstackoverflowで利用可能です:MSIの主な利点"executive summary"-の種類)。


私は大企業でリリースマネージャービルドエンジニアセットアップ開発者として、またアプリケーションパッケージャーおよび展開エンジニアとして開発に携わってきました。

これは、MSI の最良(および最悪)の概念的および実際の機能のレビューです。MSIファイルで見つかった最も一般的な設計問題は、以下の個別の回答として提示されます。完全なふりをしていない-本当に厄介な「頭脳ダンプ」-「本には見つからないもの」を意図している(おそらく正当な理由のため)。

また、このMSDNの記事「Windowsインストーラー:システム管理者向けの利点と実装」を読むことをお勧めします。


標準化:

一言で言えば、MSIは標準化に関するものであり、レガシーインストーラテクノロジーの「展開臭」に対処することに関するものです。展開の問題が繰り返し発生する、不良なインストールアーキテクチャ設計のコレクション。

全体的なMSIが提供する包括的な、標準化されたフレームワークインストーラ用決定的もアンインストール含むとするための組み込み機能およびオプションサイレント走行標準化されたGUIすることができるリモートトリガを

これらの機能だけでは大規模な改善を構成する信頼性とともに、企業展開のために、おそらく最も重要な機能-無計画アンインストールとサイレントランニングをあしらった、以前のインストールテクノロジの上にリモートパッケージ管理を経由して Active Directoryのかなど、専用のリモート管理ツールのMicrosoft SCCM、(旧SMS)を IBM Tivoli CA Unicenterなど。

誰かがこの回答の以前のバージョンを複製しました。たぶん、もっと早く読む?


レガシーインストーラー「展開の匂い」

MSI 、設計によりレガシー展開の臭いを積極的に阻止します。これらのトピックについては、後のセクションで説明しますが、簡単なリストとして、レガシーインストーラーおよび古い展開テクノロジーで最も認識される問題は次のとおりです。

  • 1)ダウングレードし、共有ファイルバージョン管理されたファイルを上書きすることがありました。その結果、dll-hellがほとんど発生しませんでした。
  • 2)多くの場合、インストーラーに適切なアンインストールルーチンが提供されていないか、適切に確実に完了しませんでした-特にサイレントで実行した場合。これは、企業のSOE管理にとって非常に大きな問題です
  • 3) サイレントインストールが適切にサポートされることはほとんどありませんでした。信頼性が低く、多くの場合、ダイアログを選択してインストールの実行を記録する必要がありましたが、これは、元の実行では記録されなかったエラーダイアログや警告ダイアログなどの予期しない条件をうまく処理しませんでした
  • 4)インストーラーは、インストールされたものの記録を保持していなかったため、ディスク上のファイルを自動的に検証して、それらがインストーラーによって元々インストールされたバージョンであるかどうかを確認する方法がありませんでした
  • 5)インストール実行可能ファイルの予測不可能、信頼性のない、非標準のコマンドラインパラメータ
  • 6)非標準のコマンドラインと標準の欠如に従って、信頼性が高く予測可能な方法で企業展開に必要な特定の値でインストーラーをカスタマイズすることは困難でした
  • 7)通常のユーザーはこれらのインストールを実行できず、多くの場合、一時的な管理者権限で混乱する必要がありました(十分な場合は「実行」を使用するか、管理者としてログインし、インストールしてからログアウトします-この完全なログインおよびプロファイル生成インストールの完了に時々必要でした)
  • 8)のsetup.exeインストーラはしばしばでしょう適切なエラーコードを返さないか、成功コードを、そして時にはそれがすぐに終了し、インストールが完了した場合、それは難しいかを決定すること、インストールを完了でしょう別のプロセスのキックう-特にバッチ経由ファイル
  • 9)ほとんどのsetup.exeファイルはファイルの抽出を許可しましたが、信頼できる予測可能な方法ではありません-通常、適切なスイッチを見つけるために多くの時間を費やす必要がありました
  • 10) ロギングは一般的に貧弱で、一部のツールでは無計画でした。ログファイルを使用したデバッグでは、明確性はほとんど得られませんでしたが、少しは役立ちました
  • 11)インストーラーの実行内容に透明性なく、インストールの失敗後に変更を元に戻すためのロールバックないか、信頼できない
  • 12)オペレーティングシステムコンポーネント、サードパーティコンポーネント、または独自の共有ランタイムコンポーネント展開する業界標準の方法はありませんでした

このリストは、他の多くの重要かつ認識されている展開上の欠陥とともに続きます。これらの問題が最も頻繁に発生したのは明らかに企業展開の世界であり、標準準拠のMSIファイルを作成するためにレガシーインストーラーディスクおよびレジストリスキャンテクノロジーでキャプチャする「アプリケーションの再パッケージ化」というビジネスをもたらしました。信頼できる展開のため。

アプリケーションの再パッケージ化専門な仕事であり、知識のある人が適切に行うと一般に優れた品質のMSIファイルになりますが、特定のアプリケーションが動作するためにインタラクティブに実行する必要がある複雑な登録ロジックのため、すべてのアプリケーションを再パッケージ化することはできません。


MSIの利点-簡単な要約

平易な言葉 MSIの本当に重要な利点は、(順不同)は次のとおりです。

  • 1) アンインストールは、アクティブに無効にされていない限り、すべてのパッケージで常に利用可能です
  • 2)これは、詳細で標準化されているロギングでも同じですが、詳細(ログファイルの分析にはWiLogUtl.exeなどのツールを使用できます)
  • 3) MSIファイルが行うことは、大部分が(半)透明または「検査可能」です。例外はカスタムアクションです(以下の透過性セクションを参照)
  • 4)セットアップのカスタマイズは標準化された方法で行われます(変換
  • 5)インストールはActive Directoryアドバタイズメント、グループポリシー、またはリモート管理を介して昇格されるため、一時的な管理者権限を台無しにする必要はありません。ここにいくつかの資格。また、グループポリシーオブジェクトエディタのこのスクリーンショットも参照してください。
  • 6)管理ツールまたはmsiexec.exeを使用したサイレントインストール/アンインストールが適切に機能する
  • 7)失敗したインストールの完全なロールバックサポートがあります。ボックスに手動でインストールする場合、知っておく必要のある資格があります。
  • 8) MSIファイルは、データベーススキーマに準拠しているため、整合性と論理的妥当性の検査と検証の両方に役立ちます(検証例を参照
  • 9)更新は標準化されたタイプですが、複雑であり、経験の浅いパッケージャーにしばしばエラーが発生しやすいです
  • 10) msiからのファイル抽出は組み込み機能です(概要についてはリンクされた記事を参照してください)
  • 11) Windowsインストーラーのコマンドラインmsiexec.exeは、インストールシーケンスの実行方法を非常にきめ細かく制御し、すべてのオプションがすべての標準準拠のMSIファイルで動作します(ログレベルを設定、サイレント/インタラクティブ/セミサイレントで実行) 、インストールパラメータの設定、トランスフォームの適用など)。
  • 12) マージモジュールは、複数のMSIパッケージで共有ファイルを配信するためのMSIメカニズムです。これは、コンパイル時にMSIパッケージとマージ可能な消耗品モジュールまたはインストールロジックのバンドルです。Wixは、Wixインクルードファイルを使用してこの概念を拡張および改善しました-私の意見では、モジュールをマージするよりも優れているという概念-特に独自のファイル(つまり、OSファイルではない)
  • 13) Windowsインストーラーエンジン自体には、インストール時にバージョン管理されたファイルや変更されたファイルが上書きさないようにするメカニズムが備わっています。これは、かなり複雑なファイル置換ロジックによって制御されます。多くの開発者がアップグレード時に変更された構成ファイルを上書きできないという問題に直面するため、効率的で優れていますが、ロジック自体が問題になる可能性があります。これらの問題の解決策は、一般的なデプロイメントアンチパターンを回避するためのアプリケーション設計の小さな変更です。それ自体は大きな議論です。

では、現実の世界、私が発見したあまり成功の側面を含めるようにパッチの適用(非常に複雑な)、MSI-GUI(プレーン機能は、非常に複雑、柔軟性に欠ける)、弾力性(可能性があり、繰り返し自己修復の問題をデバッグするのは難しい)、および全体的な複雑さ初心者向けの技術を扱うこと(時々、高度な基本操作-アップグレード、GUI、相互作用する多くの詳細などが予期しない結果を引き起こすなど)。MSIのオーバーヘッドの増加により、インストールプロセスの速度も大幅に低下しています。MSIのインストール速度を改善するためのヒントを参照してください

テキストの残りの部分では、MSIのこれらの側面のいくつかをより詳細に扱っています。


透明性(オープンインストーラー形式)

MSIファイルは、基本的にはCOM構造のストレージファイルとして保存されたSQL Serverデータベースです。基本的には、ファイル内のファイルシステムまたはデータストリームのコレクションです。これはで使用されるファイルタイプであるMicrosoft Officeドキュメント、およびそれがもたらす標準フォーマットすることができ見直し検査 - 大きな問題大企業のために。

コンパイルされたカスタムアクションを除き、MSIファイルはホワイトボックスです。セットアップがシステム全体のネットワーク設定などのクレイジーなものを変更した場合、適切なツールを使用し実際に確認できます。注目すべき例外は、コンパイルされたカスタムアクションです。これはブラックボックスです。Windowsロゴ要件では、カスタムアクションに注釈を付けて何をしているのかを説明する必要がありますが、セットアップ開発者はこれを無視することがよくあります。Wixの出現によりこれが改善されることを願っています。

そのようなコンパイルされたカスタムアクションが実際に技術的な意味で何を行うかを判断するには、セットアップキャプチャが必要です。これは私の経験ではほとんど行われていません。ソフトウェアが企業展開の承認を必要とする場合は、ベンダーに連絡して情報を入手するのがより一般的です。セットアップだけでなく、アプリケーション自体が使用を妨げる場合があります。

カスタマイズ可能性(変換)

MSIは、ベンダーのインストーラー更新プログラムとの相互運用性を維持しながら、組織のニーズと標準に合うように変換を介してカスタマイズできます。インストーラー自体を変更するのではなく、トランスフォーム(.mstファイル)(必要に応じてデータベースフラグメントまたは変更トランザクションと呼ばれる別の組織固有のファイルにカスタマイズを作成します。カスタムアクションを無効にしたり、一般的な変更を行ったり、インストーラーのすべてを上書きまたは無効にしたり、ファイルなどの新しいものを追加することもできます。変換ファイルは、MSIファイルを異なる言語にローカライズするために使用されることもあります。いくつかの変換を単一のMSIに適用できます。これは、パス切り捨てられサンプルです。

msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

クイックパラメーターの説明:

/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.

管理と報告

Windowsインストーラーは、製品がレジストリにインストールしたすべてのアイテムの包括的なデータベースを保持します(HKEY_CLASSES_ROOT \ Installer-ここで直接変更しないでください!それは専門家にも当てはまります)。

製品がインストールされているか、インストールされている機能、インストールされているファイルのバージョンを確実に判断できます。さらに、ベース製品に適用されているパッチがある場合は、そのリストを取得できます。このデータベースにはMicrosoft SCCMIBM TivoliCA Unicenterなどのさまざまなスクリプト、構成、および管理ツールを使用して、Win32、COMまたは.NETサポートするAPIを介してアクセスできます

セキュリティ(一時的な昇格した権利)

MSIには、制限されたユーザーがインストールに管理者権限を必要とする製品のインストールをトリガーできるようにする「昇格された権利」の原則も含まれます。これは、管理者がすべてのワークステーションに実際にインストールすることなく、ユーザーがインストーラーを利用できるようにする「広告機能」の一部です。この昇格された権利の概念が正しく機能するには、インストーラー自体がいくつかのコアアカウントで正しく作成されている必要があります。ユーザーは製品のインストールを自分でトリガーするか、SCCM、Tivoli、Unicenter(通常は大企業)などの専用デプロイメントシステムによってインストールを制御できます。一時的な管理者権限台無しにして作業を行う必要はありません 多くの場合、レガシーインストーラーの場合です。

また、包括的なインストールデータベースにより、インストールされたパッチの完全な概要が得られるため、自動化ツールおよび管理ツールを介してセキュリティの脆弱性を検出できます。

検証

MSIファイルを検証ルールでチェックして、多数の内部整合性ルールICEと呼ばれる)に準拠していることを確認できます。)。企業は、独自のICEチェックを作成して、特別な企業ルールと要件を実施できます。これはQAに大いに役立ちます。検証が可能な理由は、リレーショナルデータベースと関連するデータベーススキーマの自己参照の性質によるものです。データベースは、外部キー、データ型、フィールド幅、スキーマバージョンなどに関して、内部的に一貫性があり、独自のスキーマに準拠する必要があります。検証もこれを超え、パッケージ内の真の論理的な欠陥とエラーを検出できます。 、フォーマットとタイプの欠陥だけではありません。たとえば、エラーのある宛先に展開されているファイルまたはファイルタイプを検出できます。

回復力(自己修復)

Windowsインストーラーの管理者インストール機能は、MSIからソースファイルを抽出する標準的な方法を提供します(このトピックに関する追加情報があります)。これらのソースファイルを共有に配置し、すべてのワークステーションでインストールできるようになります。これにより、CDなどのインストールメディアを要求せずに、修復、アンインストール、および変更操作が完了します。これは、特別な状況で古いバージョンのソースファイルへのアクセスが必要な場合があるパッチ適用および更新操作にとって特に重要です。

この復元機能には一般的な問題もあります。ほとんどの管理者は、停止しないように見える周期的な自己修復サイクルのマシンを経験しています。この問題の原因の長いリストについては、リンクをたどってください。繰り返しますがこちらは読みやすいかもしれない短いバージョンです。

ロールバック

MSIファイルをインストールすると、通常、復元ポイントが作成されます。さらに、インストール中に置換または上書きされたすべてのファイルとレジストリアイテムは、インストールが完了せず、カスタムアクションで行われた変更がない限り、保存および復元されます。

カスタムアクションは、Windowsロゴ準拠のための独自のロールバックサポートを実装する必要があります。多くの場合、これは無視されますが、メインのカスタムアクションによって行われた変更を取り消すための2番目のカスタムアクションの作成を伴います。

ロールバックにより、インストールが失敗した場合でもワークステーションが安定した状態のままになります。実際のロールバックスクリプトがに保存されている隠しフォルダ、システムドライブに直接-一般的にC:\ Config.MSI、それが拡張.RBSと.RBFを持つファイルが含まれ- ロールバックスクリプトファイルを。設計が不十分なMSIファイルは、ここでWindowsの組み込み機能に違反する可能性があると予想される場合があります。詳細については、このスレッドの他の投稿を参照してください。

ロールバックを無効にしてインストールを高速化する方法があります。一般的にはお勧めしませんが、MSIFASTINSTALLプロパティとDISABLEROLLBACKの詳細を次に示します。これは複雑な機能ですが、ここに簡単なロールバックの概要があります

パッチ適用と更新

非常に複雑ですが、Windowsインストーラーでのパッチ適用はシステム上で完全に管理および登録されているため、インストールされているものを確認することでシステムのセキュリティ状態を判断できます。更新はいくつかの基本的なバリアントに標準化されており、これにより、複雑さを処理できれば、より確実に更新を実行できます。展開システムは、失敗した更新とその理由を報告できます。

主観的な見方では、パッチ適用は2つの基本的な用途でうまく機能ます。1)提供された製品の小さな修正プログラム、2)インストールされた製品のパッチ適用

パッチはすでに機能しているアップデートの単なる配信メカニズムです。そのため、元のセットアップ自体よりも複雑エラーが発生しやすいのは単なるコンテナーです。パッチの最大のルールは、元のMSIよりも小さくする必要があること、またはパッチを配信する明確な理由がないことです。複数の製品バージョンを対象とする場合、パッチはすぐに巨大になります。

ロギング(詳細)

Windowsインストーラーは、以前のインカネーションよりもはるかに優れた標準化されたログ機能を提供しますが、ほとんど冗長です。ログアナライザーを使用してログファイルを解読し、カスタムログレベルを使用して、不必要な情報を含む大きすぎるログファイルを生成しないようにすることができます。デバッグの目的には、詳細なログが非常に役立ちます。MSIログファイルを読み取るための適切な手動方法については、Rob Menschingのブログを参照してください(基本的に、ログファイルで" value 3 " を検索します)。詳細ログを実行するコマンドラインの例を次に示します。

msiexec.exe /I "C:\Installer.msi" /QN /L*V "C:\msilog.log"

Windows Installer TeamのRobert Macdonaldによるこの記事は、MSIロギングの実用的な外観として強く推奨されています:Windows Installer Logsを解釈する方法


結論

Windows Installerのすべてが良いというわけではありません。その複雑さは時には困惑させることがありますが、大企業の場合、上記のメリットのリストを考慮すると、MSIファイルは他の展開形式よりもはるかに優れています。

新しいインストーラーパラダイム(巨大なSQLステートメント)

新しい「パラダイム」を理解するには、MSIが固定されたイベントシーケンスではなく、ターゲットシステムで何が起こるかを宣言的に説明することを意図していることを理解することが重要です。あなたはそれを巨大なSQL文と考えることができると思います。たとえば、INIファイルに追加または変更するアイテムを宣言します。インストールの実行中に変更が追跡され、インストールが失敗した場合に変更を元に戻すことができるように、ロールバックが利用可能です。これは実際に「automagic」のように機能し、正しく行われた場合に信頼性があります。

カスタムアクション(通常の容疑者)

それは巨大な頭痛のために、経験豊富なMSIの開発者は、人々がより良い内蔵のMSI機能が実装された機能のための複雑な、信頼性のないカスタムアクションに依存している参照してください。すべてのMSIエラーとロールバック問題のかなりの部分は、誤ったカスタムアクションが原因であり、他のほとんどのエラーは、MSIデザインの誤った使用が原因です(一般的なMSIエラーのリストについては、個別の回答を参照してください)。

組み込みのMSI機能に加えて、MSIファイルをコンパイルするXML方式であるWixなどの新しいフレームワークを介して、より多くのカスタム機能が利用できるようになりました。そのため、ほとんどの操作で複雑なカスタムアクションロジックの必要性はますます少なくなっています。

MSIは、iniファイル設定、フォント、環境変数、レジストリキー、COM情報、ショートカット、ファイル拡張子、起動条件、GACインストール、ODBCなどのマージ処理を完全にサポートしています。

WIXは、SQLサーバー拡張機能、IISのインストールと構成、パフォーマンスカウンター、DirectXチェックおよびその他のゲーム関連タスク、.NETネイティブイメージ生成、COM +、ドライバー、ファイアウォールルール、PowerShell拡張機能、アプリケーション終了などの非常に高度な機能をさらにサポートします。ユーザー、グループ、共有などの管理。対処するのに多少関与しますが、独自のカスタムアクションよりもはるかに信頼性が高くなります。

可能な限りコストをかけてカスタムアクションを回避する

見通しを立てるために:これらの組み込みおよび既製のソリューションは、利用可能な最高の展開エキスパートによって作成され、数千、数万、または数百万のユーザーによってテストされます(MSIの組み込みのものについて)自体)。あなたはあなたがあなた自身のカスタムアクションをより良くすることができると本当に思いますか? カスタムアクションの使用はまれなイベントであり、インストールする製品に固有の何かを達成するために絶対に必要なはずです。また、適切なロールバックサポートも記述する必要がありますが、これは非常に複雑です。

カスタムアクションの記述はほとんどの場合間違いですが、実際に柔軟性が必要な場合もあります。いつものように、あなたの戦いをうまく選ぶことが重要です。最初は楽しいタスクかもしれませんが、多くの予期しない問題に直面し、多くの時間を浪費することになります。これは非常に深刻です。私は企業で使用するC ++カスタムアクションのスイートを自分で作成しました(エラーが発生しやすいVBScriptカスタムアクションを排除するため)-それは公園内を歩くことではなく、コーディングは世界で最も難しいことではないかもしれませんが、デバッグとテストと実際のMSIファイルへの接続は、非常に複雑なものです。利用可能な既製のオプションを調査する時間は、開発作業の数週間を節約し、展開の信頼性を大幅に高める可能性があります。

アプリケーション起動シーケンスを使用する

非常に重要な点は、1回だけ実行され、非常に複雑な偽装シーケンスコンディショニング、およびランタイムを備えたセットアップではなく、予測可能なランタイムコンテキストと適切なエラー処理が利用可能な場合、アプリケーションの起動時に多くのアプリケーション構成が行われることです複雑さ

セットアップでアプリケーションを構成するのではなく、最初の起動時に構成のためにアプリケーションを準備する必要があります具体的には、 HKLMへの書き込み、サービスの登録、マシンごとのパスへのインストール、およびアプリケーションが通常のユーザー権限で独自に書き込むことができないものなど、昇格された権限を必要とするすべての設定をセットアップで書き込む必要があります。

セットアップ開発者の場合、セットアップカスタムアクションを記述する代わりに、アプリケーションの起動シーケンスのコーディングに関与するように提案する必要があります。他に何もない場合、あなたが他の誰かに「お金を渡す」ことを試みているように見えることを避けるために。この起動シーケンスでは、より信頼性が高く、テスト可能なコードを記述できます。これにより、QA担当者からテストの支援を受けやすくなります(多くの場合、展開テストやアプリケーションテストを理解していません)。

セットアップの複雑さ

セットアップの複雑さの中心は、エラーが累積的である(迅速な再コンパイルだけでなく配信プロセスを管理している)、エラーのデバッグが非常に難しい(エラーが発生したシステムにアクセスできない)、ターゲットシステム州は考えられるあらゆる方法で異なります。この複雑さと、衝撃的な数の方法でターゲットシステムが警告する方法の詳細については、この回答を参照してください。WindowsインストーラーとWiXの作成、展開の複雑さ(下の方を参照)。

WiX(特定の目的に最適なMSIソリューション)

MSIファイルをコンパイルする新しいXMLベースの方法の説明については、このWiXクイックイントロダクションをお読みください。テキストベースのソースファイルは、以前よりもはるかに優れたソース管理を提供します。これは無料のオープンソースツールキットであり、強く推奨されています。

NB:MSIファイルに関する一般的な設計問題の概要については、スレッドの別の場所を参照してください-非常に不完全ですが、読む価値があるはずです。100%関連しているわけではないので、この返信に追加したくありませんでしたが、実際の使用では重要なトピックです。


sys-adminsのいくつかのコアMSI情報:

(恥知らずな「昇進」を許してください-それは簡単なアクセスと検索のためです)

システム管理者がネットワーク上の展開を制御するのに役立つトピックへのリンクをいくつか紹介します。

特別なハウツートピック:

概念トピック/ベストプラクティス:


24

この答えは非常に進行中の作業であり、大まかな概要です。追加、質問、更新を歓迎します。このリストは決して完全ではありません。面倒なパッケージに関する情報をコメントに追加します。


MSIパッケージに見られる典型的な問題と設計上の欠陥

また、多くのMSIファイルにエラー(場合によっては重大なエラー)が含まれていることを警告する必要がありますが、訓練されたアプリケーションパッケージャーはこれを検出し、ほとんどの場合問題を排除できます。基本的に別の質問に回答するため、これを別の回答として追加していますが、同じスレッドに関連があると感じています。

MSIに関連する技術的な詳細は非常に複雑です。基本レベルでは、ファイルとレジストリ設定をコンポーネント(アトミックインストール)と機能(ユーザーが選択できるインストールするアプリケーションパーツ(辞書機能など))に分解します。コンポーネントを分割するためのベストプラクティスルールが多数あり、MSIファイルのエラーは多数あります。これらのエラーは通常、「メジャーアップグレード」の使用を標準化することで処理されます。

実際のインストールは、いくつかのインストールシーケンスで実行されます。これらはすべてデータベーステーブルで定義されており、MSIの理解と処理は非常に複雑です。インストールシーケンス全体に広がるのは、標準アクションとカスタムアクションです。標準アクションはMicrosoftが設計したものであり、実行する必要があります(シーケンスは変更される場合があります)。ベンダーは、MSI自体でカバーされていないカスタムロジックを実行するカスタムアクションを利用できます。これらは、スクリプト形式でもコンパイル形式でもかまいません。カスタムアクションは、即時(一度に実行、システムを変更する必要はないが頻繁に実行)または遅延(実行スクリプトに書き込まれ、トランザクションとして実行され、ロールバックをサポート)することができます。

MSIの一般的なエラーは次のとおりです(特定の順序ではなく、実際の混乱として表示されます)。

  • コンポーネント作成エラー(ベストプラクティスに従っていない)。これは、ファイルや設定の欠落や無意味なエラーで爆破するパッチなどの不思議な症状を伴うパッチおよびアップグレードの問題を引き起こす可能性があります。単純化するには、ファイルの数が膨大でない限り、コンポーネントごとに1つのファイルを使用する必要があります。
  • ユーザーデータの上書きまたはリセットに関連するアップグレードの問題。以下の詳細を参照してください。
  • インストールシーケンスの「トランザクションセクション」外のカスタムアクションの誤ったスケジューリング、または間違ったタイプのカスタムアクションが誤って配置されます。これにより、デプロイメントシステムを介してリモートで実行するとアクションが失敗する(権限が昇格されない)ことが多く、トランザクションアクションのみがロールバックされるため、ロールバックは事実上無効になります。Windowsインストーラトランザクション(データベーストランザクションのコミットを考える)は、メインインストールシーケンスの標準アクションInstallInitializeInstallFinalizeの間で実行され、昇格された権限で実行されます。システムへのすべての変更はこのトランザクションで行われます-それ以外は間違いです(ただし、残念ながら非常に一般的です)。
  • トランザクションモードのインストールシーケンス以外でシステムに変更を加えるための即時モードのカスタムアクションの使用。これにより、ロールバックのサポートが中断され、インストールシーケンスのどこに配置されていても、即時モードのカスタムアクションが昇格したユーザー権限で実行されないため、一般にセキュリティエラーが発生します。
  • 明らかな理由もなく自己修復の繰り返しサイクルが発生する誤った設計。この件に関するinstallsite.orgの別の記事を次に示します。
  • 無人インストールモードでのGUIの抑制に従わないカスタムアクションは、サイレントモードで実行すると展開が完全に失敗するモーダルダイアログを表示する場合があります。この問題とサイレントモードとインタラクティブモードの全体的な違いについては、ここで詳細に説明します(多少冗長で長時間かかります)。コントロールパネルからのアンインストールは、.msiからの削除とは異なります。
  • 誤って作成されたパッケージの一部のカスタムアクション、ユーザーインターフェイスシーケンスにのみ挿入されます。これにより、サイレントインストールモードで実行されなくなります。ここではサイレントインストールがほぼ排他的に使用されるため、これは企業展開にとって深刻です。この問題はアンインストールにも影響する可能性があります。つまり、すべてのクリーンアップカスタムアクションが実行されるように、アンインストールのためにアンインストールを対話的に実行する必要がある場合があります。繰り返しますが、ユーザーインターフェイスレベルの詳細については、前の箇条書きのリンクを参照してください。
  • セットアップには、インストール先の場所に展開することを意図していないファイルが含まれています。通常、winsxsアセンブリフォルダーにサイドバイサイドでインストールする必要があるシステムファイル。
  • 遅いインストール速度は、多くの人がMSIで報告する別の「問題」です。この件に関するいくつかのヒントを以下に示します。全体的なWindowsインストーラーは、インストールするものに対するレジストリの登録要件が重いため、かなりのオーバーヘッドを備えています。
  • カスタマイズされた情報または共有データファイルの上書き。これは、INIファイルが、たとえばIniFileテーブルではなくFileテーブルを介してインストールされている場合に発生する可能性があります。後者の場合、前者の場合は「トランザクションの変更」のように扱われ、ファイル置換操作です。これは、INIファイルに非標準のフォーマットまたはファイルと共にデプロイする大きなコメントセクションが含まれていない限り、一般に間違っています開発者ツール)。
  • ファイルの上書きのための複雑なルールは、ファイルが意図せずに上書きされ、またはまったく更新されないことを引き起こす可能性があります-これは、古典的なMSIの問題です。アップグレードしないファイルを強制的に上書きする方法については、この記事を確認してください。ルールは、msiexec.exeコマンドラインレベルで設定されたREINSTALLMODEプロパティのカスタム設定によって少し調整することができ(古いバージョンを上書き、同等のバージョンを上書き、任意のバージョンを上書き...)、データファイルとバージョン対応ファイルに対して異なる動作をします。SDKの詳細。これを理解することは非常に重要であり、理解されていてもしばしば眉をひそめられるデザインです。
  • インストール中にCOMファイルを自己登録すると、セキュリティ警告がトリガーされたり、さまざまな方法で問題が発生したりする可能性があります。この記事を確認してください:自己登録が有害と見なされます。
  • ファイル置換の問題のバリエーションは、メジャーアップグレード(製品のアンインストールと再インストール)が変更されたファイルをアンインストールし、デフォルトバージョンを再インストールする場合です。これらの場合実際にはコンテンツが最初にアンインストールされてから再インストールされたときに、コンテンツは元に戻されたり上書きさたりします
  • カスタムユーザー資格情報で実行されているサービスは、メジャーアップグレードシナリオ中に資格情報を失ったり、設定ファイル(表示)がデフォルトに戻ったりすることがあります(実際にアンインストールおよび再インストールされました)。記録のためだけに:私の意見では、ユーザーの資格情報を使用して実行されるサービスは、そもそも設計上の欠陥です。
  • パブリックプロパティがクライアントからサーバープロセスに正しく渡されないため、カスタムアクションが期待どおりに完了しません。これには、SecureCustomActionPropertiesプロパティの更新が含まれます。
  • アプリケーションの中には、セットアップを最初にインストールしたユーザー以外のユーザーに対して正しく実行できないものがあります。これは重大な設計エラーですが、一般に、自己修復またはActiveSetupを使用してHKCUレジストリキーユーザープロファイルファイルを追加する経験豊富なアプリケーションパッケージャーによって修正できます。これは非常に複雑なテーマであり、作業を開始するには多少の黒い芸術が必要になる場合があります。記録のために:本当の解決策は、私の意見では、デフォルトの設定とマシンごとの場所からコピーされたテンプレートまたはアプリケーションの内部デフォルトに基づいてすべてのユーザーごとの設定を初期化できるようにアプリケーション自体を変更することですソースコード)。
  • 一部のMSIファイルは、管理者以外のユーザーに完全な読み取り/書き込み権限をここ、あちこちで設定することにより、インストールされたファイルセキュリティを台無しにします。また、アクセス許可がないために、新しいバージョンのWindowsでアプリケーションが動作しなくなる場合もあります。アプリケーションパッケージャーは、アプリケーションのカスタムパーミッションニーズの分析に頻繁に直面します。通常、HKLMまたは%ProgramFiles%のどこかに追加の許可が必要です。
  • 当時の一部のInstallshieldセットアップでは、インストール中にインターネットへの接続が試行されていました。これは、展開が厳密に制御され、インストーラーがインターネットから直接新しいコンテンツをダウンロードすることを許可されない企業展開シナリオにとっては恐ろしいことです。
  • もう1つのネットワークの問題は、セットアップ時に、インストール時にインターネット経由で検証されるデータを入力するGUIを表示しようとする場合、または単にWebサイトのライブコンテンツを表示する場合です。これは通常、電子メールアドレス、連絡先情報、ライセンスキーなどです。多くの理由で接続が完全に失敗する可能性があります。多くの場合、企業環境でのプロキシ設定の欠落が原因です(インターネットへの直接接続はなく、すべてのインターネットトラフィックは特定のキャッシュサーバーを経由し、各プロセスはファイアウォールを通過するために資格情報を提供する必要があります) 。これは、セットアップを介したライセンスの検証の危険性に関する記事です。
  • Installscript言語のランタイムをインストールするために使用されるInstallshield。この前提条件のセットアップは、通常setup.exeに含まれており、伝説的な問題の原因でした。多くのバージョン、いくつかの非互換性、および以前は多くのランタイムエラーが発生していました。バージョン12(またはその周辺)以降、このランタイムは確実にインストールされ、ネイティブにコンパイルされるか、信頼できる方法でサンドボックス(どちらか、おそらくサンドボックス)を実行しています。古いInstallshieldセットアップでは、この展開の問題が表示される場合があります。次のような問題については、Installshieldのレガシーサポートサイトがあります。http//consumer.installshield.com/common.asp
  • 英語以外の言語に設定されたマシンで実行した場合、または英語のマシンでセットアップのローカライズ(翻訳)バージョンを実行した場合でも、いくつかのセットアップで不安定なインストール動作や断続的なバグが表示される場合があります。これは、純粋に実行時の失敗、またはローカライズされたダイアログボックス機能がテキストをカットする場合、誤った書式設定または誤った翻訳、または言語ローカリゼーションに関連する他の多くのタイプのエラーである可能性があります-専門分野全体(画像内のテキストの翻訳、ソフトウェア自体の翻訳、マーケティング資料の翻訳、国際的なサポートリクエストへの対応、OSの言語設定への適応など)。一部の言語では、言語の特性を考慮してアプリケーション全体を変更する必要があります。典型的な問題は、文字列マクロとコードページ設定です。後者は、Unicodeの導入に関する問題ではありません。翻訳ツールのサンプルスクリーンショットをご覧ください
  • ほとんどすべてのセットアップは、MSIパッケージの品質をテストするために利用可能な組み込みの検証テストのいくつかに失敗します。検証の実用的な例については、この記事を参照してください。
  • メジャーアップグレードスキャン中にMSIのバージョン番号の3桁のみが実際にチェックされるため、MSIのアップグレードが失敗する場合があります。
  • INIファイルのインストールは、Windowsインストーラーの組み込み機能です。エントリは、必要な方法で追加、削除、マージ、または処理できます。ただし、INIファイルは、セグメント化された値としてではなく、ファイルとしてインストールされるのが一般的です。これにより、INIファイルが更新されるのではなく、再インストール中に上書きされる可能性があります。非常に一般的なMSIの問題。
  • 上記の問題は、.NETアプリケーションとそのConfig.xmlファイルにも当てはまります。この場合、MSIには詳細な方法でコンテンツを更新する組み込みの方法がないため、カスタムアクションを介して更新をコーディングするか、インストール時にファイル全体を置き換える必要があります。Wixにはこのための新機能があるかもしれませんが、Windows Installerエンジンにはこの組み込み機能がありません。

より多くの微妙なエラーと、私が忘れていたいくつかのより大きく典型的な問題があります。

MSDNWindows Installer Best Practiceの記事をご覧ください


5

MSIを使用すると、パッチ(MSPファイル)とアップグレードも簡単になります。MSIでは、独自の製品コードとアップグレードコードの概念を使用しているため、プロセス全体が簡単になります。

一部の展開システム(CA Unicenter Software Deliveryはその一例です)もMSIを特別な方法で理解できるため、MSIを展開システムによりよく統合できます。たとえば、MSIを展開システムのソフトウェアライブラリにフィードすると、製品内のさまざまな機能が自動的に検出され、より詳細なカスタムアクション(ローカルインストール、検証、修復など)およびログ記録が自動的に許可されます。

自己修復/修復は、MSIにとっても大きな利点です。


2

また、XMLソースコードからWindowsインストールパッケージをビルドするツールセットであるオープンソースWindows Installer XMLを確認してください。ツールセットは、開発者がビルドプロセスに統合してMSIおよびMSMセットアップパッケージをビルドできるコマンドライン環境をサポートします。これは、MSがその主要なソフトウェアパッケージのいくつかを準備するために使用します。


0

変換を行うことができます-理論的には多くをカスタマイズできます。プログラムがベンダーによって適切にパッケージ化されていれば、エンドユーザーとの対話なしで完全に自動化された展開を行うことができますコンピューターの。

人々がmsis [または無人展開]で何をしているのかを見るには、たとえばこのサイトとフォーラムにアクセスしてください。

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