相対パスはサポートされていません*。
解決策の 1 つは、インストーラーを用意することです。このスクリプトは、スクリプトの実行元の場所に従ってデスクトップ ファイルを更新します。スクリプトを実行可能にすると、ユーザーはそれをクリックしてインストールできます。このスクリプトでは、デスクトップ ファイルが書き込み可能である必要があります。
これは、Linux を念頭に置いて行われました。ファイルの名前はautorun.shです。しかし、これは単なる慣習であり、通常は自動的に実行されません。これを Linux 以外にデプロイする場合は、ファイルに別の名前 ( autorun.linux ) を付けるか、プラットフォームに応じて異なることを行うように適応させます。
#! /bin/sh
#### Fixup $APPNAME.desktop.
APPNAME=xvscatter
ICONNAME=xv_logo.png
cd $(dirname "$0")
APPDIR="$PWD/$APPNAME"
EXEC="$APPDIR/$APPNAME"
ICON="$APPDIR/$ICONNAME"
sed -i -e "s@^Icon=.*@Icon=$ICON@" \
-e "s@^Exec.*@Exec=$EXEC@" "$APPNAME.desktop"
* freedesktopの慣例では、$HOME/.icons、/usr/share/icons、または /usr/share/pixmaps にアイコンを配置します。これらのディレクトリの下には、さまざまなアイコン サイズとタイプのサブディレクトリがあります。これらのディレクトリの 1 つを使用してアイコンを保存すると、デスクトップ ファイルにはアイコン名のみ (ディレクトリなし) がリストされます。それ以外の場合は、ファイルへのフル パスを記録します。
パスにある場合、実行可能ファイルはパス名なしでリストできます (安全ではありません)。フルパスをリストすることをお勧めします。フルパスが指定されていないために間違ったプログラムが起動されることを想像してみてください。
もう 1 つの可能性は、デスクトップ ファイルをユーザーのデスクトップまたは/usr/share/applicationsにコピーし、そこで編集することです。プログラムが読み取り専用メディア上にある場合は、これを行ってください。
上記のいずれも真のインストールにはならないため、可能であれば、プラットフォームのネイティブ インストーラーとパッケージング ツール (rpm、dep、portage など) を使用してください。これらのツールは、適切なファイル許可 (selinux を考えてください) とデスクトップ メニューを含む完全なインストールのためのフレームワークを提供します。また、簡単なアンインストールも提供します。
プログラムをリムーバブル メディアから実行する必要がある場合は、/opt/vendor/progname へのシンボリック リンクをインストールするためだけにシステム インストールを使用することを検討してください。