この動作を修正する方法を知っている人はいますか?
現在、インストーラーがアプリケーションをインストールすると、IShellLinkが取得され、ショートカット アイコン (スタート メニューとデスクトップ) に必要なデータが読み込まれ、IPersistFile::Saveを使用してショートカットが書き出されます。
問題は、 IShellLink::SetIconLocationを介してアイコンに指定されたパスが%ProgramFiles%を使用するように変換されることです... x64 の場合、間違っています。
他の多くの 32 ビット ソフトウェアでは、x64 でこれが失敗することに気付きましたが、%ProgamFiles%自体を .lnk 作成コードのリテラル要素として使用していると想定しました。ただし、IShellLinkがこのバグを強制的に存在させているようで、回避策がありません (または、シェルのリンク プロパティ エディターが問題の原因であり、基になるリンクは問題ない可能性があります)。
いくつかのGoogle検索では何も見つかりませんでした...他の誰かがこれに遭遇したか、記事を知っていますか/x64ウィンドウがこれを台無しにしないようにする方法の例を知っていますか?
明確な例:
hr = m_shell_link->SetIconLocation("C:\\Program Files (x86)\\Acme\\Prog.exe", 0);
正しいアイコンを持つショートカットが作成されますが、ショートカットのプロパティ ページで [アイコンの変更] を押すと、「Windows はファイル %ProgramFiles%\Acme\Prog.exe を見つけることができません」と報告されます。)