Jos*_*arl 6 windows-registry windows-7
我正在尝试编写一个注册表黑客,当我创建一个新的 VM 或重新安装我的笔记本电脑时,它将简化我的一些设置任务。我正在做的一件事是切换到我最喜欢的应用程序(包括 Notepad++)的便携式版本(在 Dropbox 中同步)。
我想创建一个注册表项,以允许我在右键菜单中使用 Open with Notepad++ 选项,这是我在便携式版本中唯一缺少的东西。但是,我收到一个错误:
Windows cannot access the specified device, path or file. You may not have the
appropriate permissions to access the item.
Run Code Online (Sandbox Code Playgroud)
这是我的.reg文件:
[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++]
"Icon"="%USERPROFILE%\\Dropbox\\Programs\\Setup\\Icons\\Notepad++.ico"
@=""
[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++\command]
@="%USERPROFILE%\\Dropbox\\Programs\\Notepad++\\notepad++.exe %1"
Run Code Online (Sandbox Code Playgroud)
该图标完美运行。如果我硬编码C:\Users\myusername,我可以让上面的条目正常工作,但我要在这里实现可移植性。
我很确定问题只是为%符号找到正确的转义序列,但这很难说。
建议?
编辑:我add reg选择了命令选项,经过一些试验和错误后,这是有效的命令:
reg add HKCR\*\shell\OpenWithNotepad++\command /t REG_EXPAND_SZ /ve /d ^%USERPROFILE^%"\Dropbox\Programs\Notepad++\notepad++.exe %1"
Run Code Online (Sandbox Code Playgroud)
运行命令后,我也将结果导出为.reg文件。赢得四面八方。
要在注册表中使用(扩展)环境变量,该值的类型必须为REG_EXPAND_SZ。
基于这个问题,使用reg命令而不是.reg文件添加这种值是最简单的。.
reg add <KEY> /v <NAME> /t REG_EXPAND_SZ /d <DATA>
Run Code Online (Sandbox Code Playgroud)
有关reg add /?此语法的更多信息,请参见。
您还可以将数据编码为十六进制。有几个相关的例子在这里:
REG_EXPAND_SZ数据必须表示为 MS 所说的二进制数据类型(子类型“2”),因此该值必须以一种十六进制格式进行格式化,以逗号分隔,每字节两个标记(用零填充),终止符为空字节当然(进一步的解释显然远远超出了本文的范围,作者对任何人滥用迄今为止提供的不完整信息不承担任何责任)。所以上面的行将不起作用,但表明我想要达到的最终结果。作为一个真正有效的 .REG -file 条目,上面的示例必须呈现为:
"SoMeThIng"="%WINDIR%\\system32"
Run Code Online (Sandbox Code Playgroud)
变成
"SoMeThIng"=hex(2):22,25,57,49,4e,44,49,52,25,5c,5c,73,79,73,74,65,6d,33,32,22,00
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8020 次 |
| 最近记录: |