Как вызвать .exe из PL/SQL?

Я дал следующие разрешения для разрешения, и вызов CMD.EXE появляется, как показано в примере ниже кода.

Однако я не могу получить какой-либо вывод из whoami.exe. Я вижу, что каталог по умолчанию C:\app\oramgr\product\12.1.0\dbhome_1\database\, который отображается в файле JJJ.TXT. Однако файл JJJ_WHOAMI.TXT не содержит ничего.

Любые предложения?

dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\WINDOWS\SYSTEM32\CMD.EXE', 'execute');
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Windows\System32\whoami.exe', 'execute');
dbms_java.grant_permission('PWATSON', 'SYS:java.lang.RuntimePermission', '*', 'writeFileDescriptor');
dbms_java.grant_permission('PWATSON', 'SYS:java.lang.RuntimePermission', '*', 'readFileDescriptor');

dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Users\pwatson', 'read, write');
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Users\pwatson\*', 'read, write');
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\temp', 'read');

SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c CD C:\Users\pwatson\src\java ^& ECHO ^%CD^% ^& EXIT 4') as y from dual;
         Y
----------
         4

C:\app\oramgr\product\12.1.0\dbhome_1\DATABASE
SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c ECHO ^%CD^% >jjj.txt ^& EXIT 7') as y from dual;
         Y
----------
         7

SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt') as y from dual;
         Y
----------
         0


C:\app\oramgr\product\12.1.0\dbhome_1\database>type JJJ.TXT
C:\app\oramgr\product\12.1.0\dbhome_1\DATABASE

C:\app\oramgr\product\12.1.0\dbhome_1\database>type JJJ_WHOAMI.TXT

Ответы

Ответ 1

Может быть, Oracle - это никто, когда он запускает whoami в Windows? Хорошая идея - изменить пользователя, который запускает службу.


Третий вызов немного отличается от второго. Вы не вызвали выход.

Попробуйте следующее:

select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt ^& EXIT 8') as y from dual;