コンテキストメニューから引数を必要とするプログラムを作成しています(ファイルをクリックして、ファイル名をパラメーターとしてプログラムを呼び出します)。
...\Shell\myThing\commandにレジストリキーを追加しようとしています。私がしたいのは次のとおりです。
C:\Program Files (x86)\Feliratozo\Feliratozo.exe %1
%ProgramFiles(x86)%環境変数を使用したいと思います。これは、x86およびx64Windowsでも機能することをどこかで読んだためです。 (x86で「通常の」プログラムファイルに変更されます。)次のように設定しようとすると、問題が発生します。
%ProgramFiles(x86)%\Feliratozo\Feliratozo.exe %1
このように、上記のコンテキストメニュー項目を使用しようとすると、次のエラーが発生します。
Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.
絶対パスを使用すると機能するため、権限の問題は正しくないようです。
私は今何ができますか?
レジストリ値をREG_SZではなくREG_EXPAND_SZにすることを忘れないでください。通常、REG_EXPAND_SZ値のみが展開されます。
%ProgramFiles(x86)%は名前にスペースを入れて展開するため、パスを引用符で囲む必要があることを忘れないでください。次のように動作する可能性があります。 "%ProgramFiles(x86)%\ Feliratozo\Feliratozo.exe" "%1"また、Frank Thomasは、32ビットWindowsで動作しない%ProgramFiles(x86)%について正しいです。
ただし、変数は親プロセスに基づいて展開されます。 32ビットコンソールまたはregedit(SysWOW64にあります)を使用する場合、%ProgramFiles%は64ビットインストールでC:\ Program Files(x86)に展開されます。
簡単な解決策:
Install.cmd:
IF EXIST %WinDIR%\SysWOW64\regedit.exe (
%WinDIR%\SysWOW64\regedit.exe /s Install.reg
) ELSE (
%WinDIR%\regedit.exe /s Install.reg
)
Install.reg:
Windows Registry Editor Version 5.00
[...\Shell\myThing\command]
@="\"%ProgramFiles%\\Feliratozo\\Feliratozo.exe\" \"%1\""
必要なのが現在のディレクトリ、または右クリックしたファイルへのパスだけである場合は、エクスプローラーのショートカットコマンドに次の「コマンドライン変数」を使用できます。 https://superuser.com/ a/473602/231129