当我使用注册表项向Windows资源管理器上下文菜单添加条目时,如下所示:
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell]
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files]
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command]
@="%AppData%\\FindAlike\\AddRightClickFile.bat \"%1\""
我收到错误
Windows cannot access the specified device, path or file. You may not have the appropriate permissions to access the item.
如果我将文件AddRightClickFile.bat复制到C:\ Windows \ System32并将注册表项更改为
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell]
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files]
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command]
@="AddRightClickFile.bat \"%1\""
没有错误发生。但是,我想在%Appdata%\ FindAlike中存储AddRightClickFile.bat。
AddRightClickFile.bat中的代码是
reg add "HKEY_CURRENT_USER\Software\FindAlike" /f /v "TestFilePath" /t REG_SZ /d %1
有什么办法可以将.bat文件从上下文菜单命令运行,同时将其存储在%AppData%的子文件夹中?
修改
我使用以下代码在代码中创建了注册表项:
RegistryKey rk = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Classes\*\shell\Similar Files\command");
string sValue = @"%AppData%\FindAlike\AddRightClickFile.bat ""%1""";
rk.SetValue("",sValue, RegistryValueKind.ExpandString);
并按如下方式设置AddRightClickFile.bat:
start
reg add "HKEY_CURRENT_USER\Software\FindAlike" /f /v "RightClickFileName" /t REG_SZ /d %1
exit 0
这项工作正常但在我右键单击的文件目录中创建了一个命令窗口。使用任务管理器查看进程,我看到创建了cmd.exe和conhost.exe进程。如果我删除命令窗口,则两个进程都会消失。有没有办法可以自动终止这些进程,而不会通过名称杀死它们,这可能会产生不良后果。
答案 0 :(得分:4)
您的主要问题是%AppData%
被保存为变量引用,但是当读取注册表值时,变量不会扩展为其值。
原因是注册表项的(default)
值为REG_SZ
类型。如果要存储变量引用并自动扩展其值,则需要注册表项为REG_EXPAND_SZ
类型。
所以,你有两个选择
不要使用变量,请使用完整路径。
更改注册表项类型。
第一个选项没有任何问题,但第二个选项无法从regedit
完成。从命令行,您可以使用
reg.exe add "HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command" /f /ve /t REG_EXPAND_SZ /d "\"%^AppData%\FindAlike\AddRightClickFile.bat\" \"%1\""
或者,从批处理文件
reg.exe add "HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command" ^
/f /ve /t REG_EXPAND_SZ ^
/d "\"%%AppData%%\FindAlike\AddRightClickFile.bat\" \"%%1\""
note :两者之间的唯一区别是转义变量引用
答案 1 :(得分:1)
我根本不认为有必要在运行时扩展变量,所以我只需输入命令:
在批处理文件中:
@REG ADD "HKCU\Software\Classes\*\shell\Similar Files\command" /VE /D "\"%APPDATA%\FindAlike\AddRightClickFile.bat\" \"%%~1\"" /F>NUL
从命令提示符:
REG ADD "HKCU\Software\Classes\*\shell\Similar Files\command" /VE /D "\"%APPDATA%\FindAlike\AddRightClickFile.bat\" \"%~1\"" /F>NUL
<强> [编辑] 强>
如果您已将所有内容放入AddRightClickFile.bat
内,那么您可以完全绕过该文件并直接输入信息作为要运行的命令:
从批处理文件:
@REG ADD "HKCU\Software\Classes\*\shell\Similar Files\command" /VE /D "CMD /C \"REG ADD \"HKCU\Software\FindAlike\" /V \"TestFilePath\" /D \"\\\"%%L\\\"\" /F^>NUL\"" /F>NUL