5

次のNSISコードがあります

Function CreateDesktopSC
    ;Creates Desktop Shortcut
    SetShellVarContext current
    SetOutPath "$DOCUMENTS\Foo\"
    SetShellVarContext all
    detailprint "Icon path: $INSTDIR\Bar\icon.ico"
    CreateShortCut "$DESKTOP\${productName}.lnk" "$INSTDIR\Bar\binary.exe" "" "$INSTDIR\Bar\icon.ico" 0
FunctionEnd

インストール ログには、次のように表示されます (detailprint コマンドから)。アイコン パス: C:\Program Files (x86)\Bar\icon.ico

ショートカットが作成されますが、実行可能ファイルのアイコンが付いています。

lnk ファイルを開くか、ショートカットを右クリックして [アイコンの変更 ...] をクリックすると、「Windows はファイル %ProgramFiles%\Bar\icon.ico を見つけることができません」というエラーが表示されます。

%ProgramFiles% を参照すると、detailsprint コマンドで表示される x86 バージョンではなく、c:\Program Files に移動します。アイコン ファイルは存在しますが、x86 フォルダーにあります。

NSIS または Windows が "C:\Program Files (x86)\" を "%ProgramFiles%" に置き換えているようですが、これは x86 バージョンを指していません。

実行可能ファイルへの実際のパスは正しいです。正しくないのはアイコン リンクだけです。

何か案は?

4

4 に答える 4

9

スレッドからの回避策は、アイコン コードに 2 つ目の \ を追加することです。これが64ビットシステムで役立つ理由はよくわかりませんでしたが...

置き換えます:

CreateShortCut "$SMPROGRAMS\$StartMenuGroup\${PRODUCT_NAME}.lnk" "yourapp.exe" "$INSTDIR\${APPLICATION_ICON}"

CreateShortCut "$SMPROGRAMS\$StartMenuGroup\${PRODUCT_NAME}.lnk" "yourapp.exe" "$INSTDIR\\${APPLICATION_ICON}"

APPLICATION_ICON の前に 2 番目の \ を追加すると、アイコンが再び表示されます。

紛らわしいが、それは動作します

于 2012-08-14T16:25:45.940 に答える
2

NSISは、文書化されたIShellLinkインターフェースを使用するだけです。NSISフォーラムにそれに関するスレッドがあります(回避策を試すことができます)。これはWOW64のバグだと思います...(レジストリリダイレクタは、%ProgramFiles%を%ProgramFiles(x86)%に変更するように文書化されています。IShellLinkにはこのハックがないようです)

于 2012-04-25T22:47:38.443 に答える
0
  1. リダイレクトを無効にする
  2. パスからアイコンを読み込む

すべてはシステム プラグインで行われます。なぜ複雑にするのか...

于 2012-08-14T16:30:05.070 に答える
0

http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.3.4は間違っているようです。私にとってうまくいったのは次のとおりです。

CreateShortCut "$SMPROGRAMS\${PRODUCT_PUBLISHER}\${SHORTCUT_NAME}.lnk" "$INSTDIR\${PRODUCT_EXE}" "$INSTDIR\${PRODUCT_EXE}" "$INSTDIR\MyIcon.ico"
于 2012-10-02T23:50:44.713 に答える