web-dev-qa-db-ja.com

コマンドのレジストリで環境変数を使用する

コンテキストメニューから引数を必要とするプログラムを作成しています(ファイルをクリックして、ファイル名をパラメーターとしてプログラムを呼び出します)。

...\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.

絶対パスを使用すると機能するため、権限の問題は正しくないようです。

私は今何ができますか?

8
Martin Fejes

レジストリ値をREG_SZではなくREG_EXPAND_SZにすることを忘れないでください。通常、REG_EXPAND_SZ値のみが展開されます。

13
Werner Henze

%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\""
3
theDEXmonster

必要なのが現在のディレクトリ、または右クリックしたファイルへのパスだけである場合は、エクスプローラーのショートカットコマンドに次の「コマンドライン変数」を使用できます。 https://superuser.com/ a/473602/231129

0
Venryx