依存関係と、インストーラ6でdll / ocxを手動で追加する違いは何ですか?
-
08-07-2019 - |
質問
vb6アプリのセットアップパッケージをビルドするために、vs installerを使用しています。 問題は、プロジェクトエクスプローラの下に、exeファイルに添付されている依存関係のリストがあることを確認できることです。
代替テキストhttp://img505.imageshack.us/img505/9696/croppercapture259lr8 .png
そしてターゲットマシンのツリービューのファイルシステムの下で、dll / ocxを実際にフォルダまたはWindowsシステムフォルダ自体[左ウィンドウ]に保存できます。
代替テキストhttp://img101.imageshack.us/img101/9224/croppercapture251qm1 .png
だから私が理解できないのは..実際に違いはありますか? 依存関係を設定しただけで、dllまたはocxをフォルダーに追加しなかったり、sysフォルダーを獲得しなかった場合、dllも自動的にコピーされますか?
解決
これらのdllがすべて、ソフトウェアがインストールされているシステムに存在することは保証されません。そのため、インストーラーに含める必要があります。そこから2つの選択肢があります。
Windowsシステムフォルダーまたはアプリケーションフォルダーにインストールできます。違いは、それらをアプリケーションフォルダーにインストールすると、XPとVistaで設定できるため、異なるバージョンのコンポーネントを含む異なるバージョンのソフトウェアを起動して、並行して実行できることです。それらをシステムフォルダにインストールすると、古いバージョンのコンポーネントに依存する古いバージョンが破損します。
アプリケーションフォルダーへのインストールは、更新できない他のコンポーネントにコンポーネントが依存している場合、ほとんど機能しません。これが発生する場合、通常はMicrosoftライブラリを使用しています。彼らはこの問題に関して長年にわたって良くなっています。
サイドバイサイド実行に関する問題の詳細については、こちらをご覧ください。 a>
最後に、Windowsレジストリに登録されるように、依存関係をインストーラーに含める必要があります。ほとんどの.NETアセンブリとは異なり、ActiveX / COMアプリケーションは、CreateObject型とVariant型を使用してアクセスする場合でも、コンポーネントを登録する必要があります。
プロセス全体が特異であり、DLLヘルに関するストーリーのソースの1つであることを認めます。 MSDNの記事から始めて、ウィキペディアを使用し、もちろんここでさらに質問をしてください。
他のヒント
通常は「dll」を使用しないでください。通常のインストーラーパッケージのアプリフォルダーの下のフォルダーですが、多くの要素が関係しています(プライベート標準DLL、Reg-Free COMなど)。はい、依存関係が含まれます(それらを除外しない限り)。それぞれに、ターゲットシステムのどこにインストールするかを決定するプロパティが必要です。
このリストには、OSに依存するシステムコンポーネント、MDACコンポーネントであるため、この方法で再配布できないコンポーネント、またはredist(fm20.dllなど)のライセンスが付与されていないコンポーネントも多数あります。
残念ながら、これはユーザーのシステムのDLL Hellに直接つながる可能性のあるパッケージの種類の例です。これを修正することは、MS KB記事のすべてのMSコンポーネントを調査して、何をどのように再配布できるか、またはどのように再配布するかを決定することを意味します。
展開を正しく行うには、面倒なビジネスになる場合があります。