设置环境的批处理脚本。变量启动 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
仅在服务器启动时指向服务器文件夹
我正在尝试生成必须执行的批处理文件:
- 设置环境变量
ORACLE_HOME
- 启动 OC4J 服务器
- 取消设置
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。
- 打开命令提示符 window 并输入
set x=Hello
。
- 键入
set x
,您会看到 x=Hello
。
- 执行
start
导致打开第二个命令提示符 window。
- 在第二个命令提示符中键入 window
set x
,您也会显示 x=Hello
。
- 切换回第一个命令提示符 window 和 运行
set x=Hi
.
- 在第一个命令提示符中键入 window
set x
,您会看到 x=Hi
。
再次切换到第二个命令 window,键入 set x
,您仍然看到 set x=Hello
.
第二个命令进程已获得第一个命令进程的副本。因此,现在在第一个命令进程的环境 table 中发生的更改对于第二个命令进程是不可见的。
在第二个命令中执行 window set x=Bye
并用 set x
.
验证
切换回第一个命令 window 并输入 set x
.
它仍然是输出 x=Hi
因为父进程也不会取回子进程在其环境副本中修改的内容 table.
切换到第二个命令window并输入set path=
从环境table中删除环境变量PATH进程.
- 再次执行
start
从第二个命令 window 打开第三个命令 window.
输入set path
,你只显示
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
系统 PATH 发生了什么?
系统 PATH 以及用户帐户相关 PATH 仍然在 Windows 注册表中设置并一起构建 PATH 用于从桌面资源管理器进程启动的新进程。但是在第二个和第三个命令过程的环境 tables 中没有环境变量 PATH 了。这两个进程现在必须在没有环境变量 PATH 的情况下工作。当然,对于第一个命令进程和所有其他 运行ning 进程,PATH 仍然存在于它们的环境中 tables.
在本地计算机上安装了一个 Oracle 客户端 (11.2.0) 和一个 OC4J 服务器(Oracle Containers for J2EE 10g (10.1.3.5.0) (build 090727.2000.36696)),它们都使用 ORACLE_HOME
环境变量所以我需要设置 ORACLE_HOME
仅在服务器启动时指向服务器文件夹
我正在尝试生成必须执行的批处理文件:
- 设置环境变量
ORACLE_HOME
- 启动 OC4J 服务器
- 取消设置
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。
- 打开命令提示符 window 并输入
set x=Hello
。 - 键入
set x
,您会看到x=Hello
。 - 执行
start
导致打开第二个命令提示符 window。 - 在第二个命令提示符中键入 window
set x
,您也会显示x=Hello
。 - 切换回第一个命令提示符 window 和 运行
set x=Hi
. - 在第一个命令提示符中键入 window
set x
,您会看到x=Hi
。 再次切换到第二个命令 window,键入
set x
,您仍然看到set x=Hello
.第二个命令进程已获得第一个命令进程的副本。因此,现在在第一个命令进程的环境 table 中发生的更改对于第二个命令进程是不可见的。
在第二个命令中执行 window
set x=Bye
并用set x
. 验证
切换回第一个命令 window 并输入
set x
.它仍然是输出
x=Hi
因为父进程也不会取回子进程在其环境副本中修改的内容 table.切换到第二个命令window并输入
set path=
从环境table中删除环境变量PATH进程.- 再次执行
start
从第二个命令 window 打开第三个命令 window. 输入
set path
,你只显示PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
系统 PATH 发生了什么?
系统 PATH 以及用户帐户相关 PATH 仍然在 Windows 注册表中设置并一起构建 PATH 用于从桌面资源管理器进程启动的新进程。但是在第二个和第三个命令过程的环境 tables 中没有环境变量 PATH 了。这两个进程现在必须在没有环境变量 PATH 的情况下工作。当然,对于第一个命令进程和所有其他 运行ning 进程,PATH 仍然存在于它们的环境中 tables.