1

Wise インストーラーでインストールされるアプリケーションがあります (編集: Wise は MSI ではなく Setup.exe ファイルを作成します)。インストール時に、特定のファイル タイプのアイコンが設定されます。

HKEY_CLASSES_ROOT\.auz\DefaultIcon = C:\Path\To\App\some_icon.ico,0

ただし、インストール直後に、エクスプローラーは、一般的な「ホワイト シート + アプリケーション アイコン」アイコンを使用してこのアイコンを表示することを選択しますが、これは異なります (私が提供したものではありません)。

最初の起動時に、アプリケーション自体がアイコンやその他のファイルの関連付けを登録するため、最後に実行されたバージョンがそれらのドキュメントを「所有」します。その時点で、エクスプローラーはこのファイルの種類のアイコンを変更し、正しいアイコンを表示しますが、レジストリを見ると、DefaultIcon の値はまったく同じです。

これは私がこれまでに試したことです

  • レジストリからすべてのエントリを削除し、自分で書き込みます。
  • インストール後、DefaultIcon の値に「触れ」、 SHChangeNotify(SHCNE_ASSOCCHANGED)のみを呼び出す小さなプログラムを起動します(私のプログラムは、レジストリ内のファイルの関連付けを更新した後にこれを行います)。
  • インストール後、エクスプローラーを強制終了して再起動します。
  • インストール後、TweakUI を使用してデスクトップ上のアイコンを「修復」します。

これらのどれも機能しません。正しいアイコンを取得する唯一の方法は、プログラム自体にインストールさせることです。レジストリに変更が見つかりません。髪を引っ張っています。

避けたいこと

  • 別のインストーラー ソフトウェアでのテスト
  • インストール スクリプトを変更しすぎています (インストーラーはオンデマンドで別のマシンにビルドされるため、Wise 自体はありません)。
  • 実行可能ファイルにアイコンを埋め込みます。

インストール後にエクスプローラーに正しいアイコンを表示させる方法について何か提案はありますか?

4

2 に答える 2

1

いくつかのことが頭に浮かびます。

  • レジストリのアイコンの後に「、0」があるのはなぜですか?これにより、表示されるアイコンが1つのアイコンに制限されます。複数のアイコンを含むアイコンファイルを用意することをお勧めします(同じアイコンUIですが、サイズ/色深度が異なります)-エクスプローラーのアイコンビューは異なります!アイコンファイルにアイコンが1つしかない場合は、「、0」を削除してみてください。
  • エクスプローラーが更新の通知を受け取った後、レジストリがインストーラーで最後に書き込まれた可能性がありますか?
  • アイコンファイルがディスクに保存された後、レジストリエントリが書き込まれていることを確認してください
  • ファイルタイプを登録するには、Wiseインストーラー独自の構成を使用する必要があります。確かではありませんが、msiのインストール全体が完了するまで、エクスプローラーは変更を加えないと思います。そのため、SHChangeNotify()を手動で呼び出すことは役に立ちません。msiにはこのための独自のテーブルがあり、適切な構成を使用するとWiseが追加します。

Wiseの場合は、(自分でレジストリキーを作成する代わりに)次の手順を実行します。

  1. [機能の詳細]ページグループで、[ファイルの関連付け]ページを選択します。
  2. [現在の機能]ドロップダウンリストから、[コア]を選択します。
  3. ウィンドウの右側にある[追加]をクリックして、[新規]を選択します。[ファイルの関連付けの詳細]ダイアログが表示されます。
  4. [拡張機能の詳細]タブをクリックします。
  5. QuickFactsディレクトリを参照し、ファイルQckFacts.exeを選択して、[OK]をクリックします。
  6. [拡張機能]に次のように入力します:qft
  7. 残りのフィールドはデフォルトのままにして、[OK]をクリックします。拡張子.QFTがインストールに追加されます。エンドユーザーが宛先コンピューターでこの拡張子の付いたファイルをダブルクリックすると、QuickFactsアプリケーションが起動します。
  8. インストールを保存します

[編集]必要なレジストリエントリが欠落している可能性もあります(アイコンがシェルに表示するには不十分な場合があります)。

HKEY_CLASSES_ROOT\.auz\(default) = auzfile
HKEY_CLASSES_ROOT\.auz\shell\open\command = C:\Path\To\App.exe
于 2009-01-09T14:52:51.423 に答える
1

これが解決策です。

各ファイル タイプ (この場合は「.auz」としましょう) は次のように登録されました。

  • DefaultIconアイコン リソースへのパスを含むキー、および
  • HKEY_CLASSES_ROOT\.auz\(default)「Foobar Document」など、ファイルの種類を説明する値。

これに加えて、「Foobar Document」ドキュメント タイプのエントリ、またはより具体的には、シェルからそのようなドキュメントを開く方法のキーがありました。

HKEY_CLASSES_ROOT\Foobar Document\Shell\command\open\(default) = C:\Path\To\App.exe "%1"

どうやら、このキーは特定のファイル拡張子に書き込まれた値に取って代わります。アイコンは .exe ファイルの外部にあるため、Windows エクスプローラーはアプリケーションの最初のアイコンを使用して、「Foobar ドキュメント」タイプのすべてのファイルのアイコンを作成しました (前述の「白いシート + アプリケーション アイコン」アイコン)。

さて、私が間違っていたのは、アプリケーション自体が値を変更するということでした

HKEY_CLASSES_ROOT\.auz\(default)

「Foobar 1.2 Document」と言うと、開始時にわずかに異なる値になります (DRY でないことの問題)。したがって、「Foobar ドキュメント」へのリンクは失われ、.auz ファイルは最初の起動後にアイコンを取得しました。

HKEY_CLASSES_ROOT\Foobar Documentそこで、キーを完全に削除するだけでこれをすべて修正しまし

于 2009-01-12T20:11:11.030 に答える