仅更改特定应用程序生命周期的注册表值

仅更改特定应用程序生命周期的注册表值

是否可以覆盖特定应用程序生命周期的任意 Windows 注册表项的值?

我希望可以使用命令行设置临时注册表值,以便我可以将它与以下批量临时环境变量更改相结合(指向 1.7 JDK)。C:\Windows\System32\cmd.exe /c "SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_75&& START /D ^"C:\Path\To\^" SpecialSnowflake.exe"


具体情况详情:

我正在使用一个需要 JDK 的程序(所以我有点迷失了)。编程的质量令人怀疑。我推测了 Process Monitor 中的相关事件,并拼凑出了一个可能的时间线。这些细节似乎与临时覆盖注册表值的任务无关,但为了以防万一,这里还是列出来:

当程序尝试选择并启动正确版本的 java.exe 时,它​​会检查注册表路径HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\java.exe。据推测,程序希望这个看起来奇怪的键指向 Java 的最新版本(为什么不使用 Path 和/或 JAVA_HOME 变量?),但是,这个奇怪的键在我的任何一台电脑上都不存在。由于找不到该键,程序使用可能硬编码的 Java 默认路径,结果是 %windir%\SysWOW64\java.exe。这个特定的 java.exe 尚未被任何 1.8 JRE/JDK 安装程序触及,因此在我的电脑上仍然是过时的 1.7。这个 1.7 java.exe 被启动。它检查键HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment\CurrentVersion,读取 1.8,然后终止自身。有问题的程序注意到了这一点,报告该键是 1.8,但应该是 1.7,并有帮助地提供了错误的从未检查过的键的注册表路径:('Software\JavaSoft\Java Runtime Environment'\CurrentVersion'奇怪的'字符不是我添加的)。

答案1

我认为您的选择是:

  1. 通过批处理脚本运行该产品,该脚本会将注册表设置为版本 1.7,运行程序,然后返回注册表项。运行时,无法使用 Java 1.8 程序。
    批处理REG 命令将会很有用。

  2. 从沙箱运行程序,例如沙盒,其中注册表将始终包含 1.7,并且它所处理的文件夹将被排除在沙盒之外。
    请参阅 Sandboxie 文档 资源访问设置,特别是“直接访问”。

相关内容