0

いくつかのファイルタイプのレジストリを編集して、アイコンとそれらを実行するアプリケーションを変更するNSISインストーラーに取り組んでいます。
私たちのワークフローは、Win7 / 32ビット、WinXP / 32、およびWinXP / 64で正しく機能しますが、Win7/64では機能しません。これを複数のWin7/64マシンでテストしましたが、問題は両方のWin7/64インスタンスで一貫しています。
追加の詳細の1つは、新しい関連付けを作成すると正常に機能するため、既存の関連付けをオーバーライドする場合のみであるということです。

レジストリの編集は単純に設定されDefaultIconshell/open/commandレジストリの編集が完了したら、SHChangeNotifyシステムコールを使用して、シェルを強制的に新しい設定で更新します。
Win7 / 64では、既にレジストリにあるファイルタイプが新しい値に更新されていません。

; Tell the shell to reset its icon cache
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(0x08000000, 0, 0, 0)'

特にシステムの再起動やExplorerの再起動を伴わないソリューションは、どんな助けでも大歓迎です。助けてくれてありがとう!-クリス

4

1 に答える 1

0

この問題は、x64 のレジストリで問題が発生する傾向があるさまざまな事柄に関連している可能性があります: VirtualizationRedirector、およびReflection。ファイル拡張子から progid へのマッピングが間違っている可能性もありますか? (コードを投稿しない場合や、変更するファイルタイプを教えてくれる場合はわかりにくい)

仮想化をオフにするには、スクリプトに が含まれていることを確認してくださいRequestExecutionLevel admin

NSIS に 64 ビット レジストリの使用を強制することもできますが、実際に書き込みを行っている場所を確認できるように、 Process MonitorSetRegViewを使用してインストーラーを監視することをお勧めします。その後、explorer.exe を監視して、読み取り元を確認できます。

于 2012-08-27T19:22:47.023 に答える