以前は、Windowsレジストリに特定のmimeタイプを登録することで、ローカルにインストールされたヘルパーアプリケーションを起動できました。これにより、ユーザーが内部ブラウザアプリケーションの現在のインストールへのリンクを1回クリックできるようになりました。これは、Internet Explorer 5(ほとんどの場合)およびFirefoxで正常に機能しましたが、InternetExplorer7では機能しなくなりました。
shell / open / commandに渡されたファイル名は、ダウンロードされたインストールパッケージへの完全な物理パスではありません。IEから渡されるパスパラメータは
"C:\Document and Settings\chq-tomc\Local Settings\Temporary Internet Files\
EIPortal_DEV_2_0_5_4[1].expd"
残念ながら、これは呼び出し時またはオブジェクトFileExists()
の作成を試みたときに物理ファイルに解決されません。TFileStream
"Content.IE5\ALBKHO3Q"
物理パスに、絶対パスが次のように表されるインターネット一時ファイルのInternetExplorer隠しキャッシュサブディレクトリがありません。
"C:\Document and Settings\chq-tomc\Local Settings\Temporary Internet Files\
Content.IE5\ALBKHO3Q\EIPortal_DEV_2_0_5_4[1].expd"
はい、サブディレクトリはIEによってランダムに生成されます。残念ながら、IEがヘルパーアプリケーションへのフルパスを渡す限り、これは問題になりません。
mimeヘルパーアプリケーションのインストールは問題ではありません。これは、世界中の10,000人以上のユーザーすべてのグローバルログインスクリプトによってインストール/更新されます。mimeヘルパーは、ユーザーがデスクトップブラウザアプリケーションのインストールへのリンクを含む内部Webページをクリックしたときにのみ呼び出されます。そのインストールは、mime-typeので返され"application/x-expeditors"
ます。".expd"
/ mime-typeの登録は"application/x-expeditors"
次のようになります。
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.expd]
@="ExpeditorsInstaller"
"Content Type"="application/x-expeditors"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller]
"EditFlags"=hex:00,00,01,00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller\shell\open]
@=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller\shell\open\command]
@="\"C:\\projects\\desktop2\\WebInstaller\\WebInstaller.exe\" \"%1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type\application/x-expeditors]
"Extension"=".expd"
ユーザーのすべてのIEキャッシュエントリを列挙することを検討しましたが、それらすべてを調べるのにどれくらいの時間がかかるか、または探している現在のエントリの前に古いキャッシュエントリを見つけてしまう可能性があるかどうかが心配です。ただし、括弧で囲まれたファイル名のサフィックス"[n]"
が一意のキーである場合があります。
私はwininetメソッドを試しましGetUrlCacheEntryInfo
たが、IEから渡された仮想パスではなく、URLが必要です。
私の望みは、仮想パスを指定すると物理パスを返すシェル関数があることです。