インストーラーに Inno を使用しており、ファイルの種類をアプリに関連付けたい:
Root: HKCR; Subkey: ".rpl"; ValueType: string; ValueName: ""; ValueData: "MyReplay"; Flags: uninsdeletevalue;
Root: HKCR; Subkey: "MyReplay"; ValueType: string; ValueName: ""; ValueData: "Replay File"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "MyReplay\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\MyApp.ico,0"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "MyReplay\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\MyApp.exe"" ""%1"""; Flags: uninsdeletekey;
現在、.rpl ファイルをダブルクリックするとアプリが起動しますが、作業ディレクトリは .rpl ファイルが配置されているように見えるため、データを読み込めないためにアプリがクラッシュします。レジストリを設定して、起動するアプリだけでなく、ファイルの関連付けの開始/作業ディレクトリを制御することはできますか? それとも、私のアプリ自体がこれを回避できる必要がありますか?
ポイントは、EXE を常にc:\Programs\MyApp などから実行したいということです。ショートカットをクリックするか、手動で実行すると問題ありません。私が見つけた唯一の例外は、アプリに関連付けられたタイプのファイルをダブルクリックすると、Windows が EXE の作業ディレクトリをそのファイルの場所に設定することです。
このすべての背後にある問題は、私の PC に開発ビルドがあり、通常のユーザーと同じようにリリース バージョンもインストールしていることです。レジストリに移動して、インストールされた製品版のファイルへのパスを見つけることなく、開発版を実行できるようにする必要があります。