16

依存ファイルを app ディレクトリに配置したいと考えています。

VB6にローカルディレクトリのファイルのみを使用させることができることを覚えているようです。

ヒントはありますか?

4

5 に答える 5

12

プロジェクトにReg-Free COMを設定することもできます。Unattended Make My Manifestというフリーウェアがあり、ほとんどの作業を自動で行ってくれます。

于 2008-12-08T18:47:41.800 に答える
7

コンポーネントライブラリをEXEフォルダ(.localファイルの有無にかかわらず)に配置すると、ターゲットマシンの衛生状態にも悪影響を与える可能性があります。

VB6プログラムは、コンポーネントが以前に登録されていない場合、バックの後ろにあるself-regエントリポイントを介してここにコンポーネントを登録します。次に、アプリケーションを移動または削除すると、再登録が壊れたままになります。同じコンポーネントの一部を使用して、後でインストールするアプリケーションにとっては致命的となる可能性があります。ただし、これは、アプリケーション固有のコンポーネント、つまり、別のアプリケーションで必要になることのない独自のDLLまたはOCXの場合はおそらく問題ありません。

.localトリックは、実際にはVB6プログラムで使用するためのものではありません。使用する場合、インストーラーは、コンポーネントがまだマシン上にない場合は、コンポーネントを認識して適切にインストールおよび登録する必要があります。これは、展開戦略ではなく、個々のマシンでDLLバージョンの互換性の問題を回避するための手動のハックとして意図されていました。

より良いソリューションを得るには、SxSアプリケーションおよびアセンブリマニフェスト(Reg-Free COMなど)に移動してください。DLL / COMリダイレクト(.local)は良い試みでしたが、多くの疣贅があります。

于 2009-01-17T18:55:34.793 に答える
7

検索順序に関する Clay Nichol の回答は、まったく正しくありません。この検索順序は、COM 以外のコンポーネントにのみ適用されます。つまり、OCX ではなく、一部の DLL のみです。COM オブジェクトを登録すると、reg-free COM または .local ファイルを使用しない限り、ローカル ディレクトリの内容に関係なく、登録されているディレクトリから使用されます。

編集:

MakeMyManifestは、VB6 プロジェクトのマニフェストを作成するための自動ツールとしてよく知られていますが、自分で試したことはありません。 DirectCOMにもファンがいますが、まだ試していません。

編集MMM Web サイトがダウンしています。ここで、作成者がホスティングに問題を抱えていて、Make My Manifest を入手できる別の場所を提供していることがわかります。ここからダウンロードしてください

reg-free COM マニフェストを生成するための半自動技術があります。マニフェストは Visual Studio 2008 で作成できます (Visual Basic Express Edition などの無料バージョンを使用できます)。次に、マニフェストを VB6 からの使用に適したものにするために、手動でいくつかの編集を行います。ステップバイステップの手順については、この MSDN 記事のこのセクションを参照してください。ClickOnce に関する記事の残りの部分は無視してください。

于 2008-12-09T17:36:02.583 に答える
6

Windowsのすべてのバージョンでルールが変更されるため、混乱を招く可能性があります。古いバージョンのWindowsは、現在のディレクトリの前のパスを検索します。

マニフェストのない単純な解決策:

実行可能ファイルがの場合はA.EXE、同じディレクトリに(0バイト、空の)ファイルを追加します。A.EXE.local古いバージョンのWindowsの場合、これにより、アプリディレクトリが検索順序のパスの前に配置されます。

于 2008-12-06T08:09:55.630 に答える
5

自分で見つけた:

Windowsは最初にAppDirectoryを調べます。SafeDllSearchModeが有効になっている場合、検索順序は次のようになります。

  1. アプリケーションがロードされたディレクトリ。
  2. システムディレクトリ。GetSystemDirectory関数を使用して、このディレクトリのパスを取得します。
  3. 16ビットシステムディレクトリ。このディレクトリのパスを取得する関数はありませんが、検索されます。
  4. Windowsディレクトリ。GetWindowsDirectory関数を使用して、このディレクトリのパスを取得します。
  5. 現在のディレクトリ。
  6. PATH環境変数にリストされているディレクトリー。これには、AppPathsレジストリキーで指定されたアプリケーションごとのパスは含まれないことに注意してください。DLL検索パスを計算する場合、AppPathsキーは使用されません。

SafeDllSearchModeが無効になっている場合、検索順序は次のようになります。

1.アプリケーションのロード元のディレクトリ。2.現在のディレクトリ。3.システムディレクトリ。GetSystemDirectory関数を使用して、このディレクトリのパスを取得します。4.16ビットシステムディレクトリ。このディレクトリのパスを取得する関数はありませんが、検索されます。5.Windowsディレクトリ。GetWindowsDirectory関数を使用して、このディレクトリのパスを取得します。6.PATH環境変数にリストされているディレクトリ。これには、AppPathsレジストリキーで指定されたアプリケーションごとのパスは含まれないことに注意してください。DLL検索パスを計算する場合、AppPathsキーは使用されません。

によると:http://msdn.microsoft.com/en-us/library/ms682586.aspx

ただし、マニフェストを使用して.dllを検索する場所にリダイレクトできます。

http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx

于 2008-12-05T21:11:43.477 に答える