设置环境的批处理脚本。变量启动 OC4J 并删除环境。多变的

Batch script for set env. variable startup OC4J and remove env. variable

在本地计算机上安装了一个 Oracle 客户端 (11.2.0) 和一个 OC4J 服务器(Oracle Containers for J2EE 10g (10.1.3.5.0) (build 090727.2000.36696)),它们都使用 ORACLE_HOME 环境变量所以我需要设置 ORACLE_HOME 仅在服务器启动时指向服务器文件夹

我正在尝试生成必须执行的批处理文件:

  1. 设置环境变量ORACLE_HOME
  2. 启动 OC4J 服务器
  3. 取消设置 ORACLE_HOME 变量

我正在尝试使用此脚本,但第三个语句从未运行。

call setx -m ORACLE_HOME "C:\Servers\oc4j_extended_101350" 
call C:\Servers\oc4j_extended_101350\bin\oc4j -start 
call REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V ORACLE_HOME

所有这些命令都可以单独执行。但是,在同一个批处理脚本中,启动 OC4J "never" 结束。知道我该怎么做吗?

如有任何帮助,我们将不胜感激

启动Oracle服务器的批处理文件只需要下面两行:

set "ORACLE_HOME=C:\Servers\oc4j_extended_101350"
C:\Servers\oc4j_extended_101350\bin\oc4j.exe -start

如果 oc4j.exe 不是控制台应用程序,那么就是这样,因此命令处理器在启动后立即继续处理批处理文件 oc4j.exe 导致关闭命令进程。

否则使用:

set "ORACLE_HOME=C:\Servers\oc4j_extended_101350"
start "Oracle Server" C:\Servers\oc4j_extended_101350\bin\oc4j.exe -start

为什么这有效?

Windows 在创建新进程时自动为新进程创建当前进程的整个环境 table 的副本。

对于执行批处理文件的命令进程 ORACLE_HOME 在批处理文件中指定的环境 table 中设置。

启动 Oracle 服务器时 环境 table 由 Windows 复制到 Oracle 服务器,包括当前定义的 ORACLE_HOME。 Windows 注册表中定义的内容无关紧要,不予考虑。 Oracle 服务器根本看不到是否还设置了 ORACLE_HOME,如果设置了,父进程或其他进程的值是 运行ning parallel.

演示环境 table 管理的简单示例 Windows。

  1. 打开命令提示符 window 并输入 set x=Hello
  2. 键入 set x,您会看到 x=Hello
  3. 执行 start 导致打开第二个命令提示符 window。
  4. 在第二个命令提示符中键入 window set x,您也会显示 x=Hello
  5. 切换回第一个命令提示符 window 和 运行 set x=Hi.
  6. 在第一个命令提示符中键入 window set x,您会看到 x=Hi
  7. 再次切换到第二个命令 window,键入 set x,您仍然看到 set x=Hello.

    第二个命令进程已获得第一个命令进程的副本。因此,现在在第一个命令进程的环境 table 中发生的更改对于第二个命令进程是不可见的。

  8. 在第二个命令中执行 window set x=Bye 并用 set x.

  9. 验证
  10. 切换回第一个命令 window 并输入 set x.

    它仍然是输出 x=Hi 因为父进程也不会取回子进程在其环境副本中修改的内容 table.

  11. 切换到第二个命令window并输入set path=从环境table中删除环境变量PATH进程.

  12. 再次执行 start 从第二个命令 window 打开第三个命令 window.
  13. 输入set path,你只显示

    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    

系统 PATH 发生了什么?

系统 PATH 以及用户帐户相关 PATH 仍然在 Windows 注册表中设置并一起构建 PATH 用于从桌面资源管理器进程启动的新进程。但是在第二个和第三个命令过程的环境 tables 中没有环境变量 PATH 了。这两个进程现在必须在没有环境变量 PATH 的情况下工作。当然,对于第一个命令进程和所有其他 运行ning 进程,PATH 仍然存在于它们的环境中 tables.