Start the process when it is not running (by vbscript)

Иногда требуется проверить запущен ли процесс (например, notepad.exe) под пользователем (user1), чтобы случайно не запустить его дважды, или вообще запустить его, если он отсутствует в списке процессов. Я описал пример запуска java.exe для компиляции apex.war (запуска Oracle Apex listener 2.0.3), при условии, что база данных APEX (Oracle) работает и процесс не запущен. Для проверки запущен ли процесс, написал функцию SearchProcess, которая возвращает 1, если процесс запущен.

'(с) 19.05.2014
Dim ObjShell, Shell
Dim ObjProc
Dim StrORA
Dim dblist
Dim chekdir
Dim procname
Dim ownername
Dim Res
Dim JavaHome

'Указываем путь к java.exe нужно нам версии
JavaHome="c:\Program Files\Java\jdk1.6.0_18\bin\java.exe"

'Подключение к базе (Oracle)
Set ObjShell = CreateObject("WScript.Shell")
WScript.Sleep 600
StrORA = "sqlplus /@APEX as sysdba @x:\apexlistener\connect.sql" 'файл connect.sql содержит следующий код: select sysdate from dual; exit
Set ObjProc = ObjShell.Exec(StrORA)

input = ""
strOutput = ""
'Читаем output нашего соединения к базе
Do While Not ObjProc.StdOut.AtEndOfStream
input = input & vbCrLf & ObjProc.StdOut.ReadLine
Loop

'Если соединение завершилось успешно
If InStr(input, "SYSDATE") Then
'Проверяем запущен ли процесс под этим владельцем
Res = SearchProcess("java.exe", "orauser")
If Res 1 Then
StrORA = JavaHome & " -Dapex.home=x:\apex\8090 -Dapex.port=8090 -Dapex.images=x:\apex\images -jar apex.war"
Set ObjProc = ObjShell.Exec(StrORA)
End IF
Else
'WScript.Echo "ORACLE is DISABLE!"
End If

Function SearchProcess(procname, ownername)
'(c) 19.05.2014
'What's: проверяет запущен ли процесс на компьютере и кто его владелец
' procname - имя процесса
' ownername - имя пользователя, под кем запущен процесс

Dim strComputer ' Имя компьютера
Dim objService ' Объект SWbemServices
Dim colProcesses ' Коллекция экземпляров класса WMI
Dim objProcess ' Элемент коллекции
Dim WshShell ' Объект WshShell
Dim cnt 'счетчик
Dim Return
Dim strNameOfUser

Set WshShell = WScript.CreateObject("WScript.Shell")

' "." - локальный компьютер
strComputer = "."

' Подключаемся к пространству имен WMI
Set colProcesses = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2").ExecQuery("SELECT * FROM Win32_Process")

if colProcesses.Count > 0 Then

'Перебираем коллекцию
For Each objProcess in colProcesses

'Проверяем искомый процесс
If objProcess.Name = procname Then
' Проверяем владельца процесса
Return = objProcess.GetOwner(strNameOfUser)
If Return = 0 Then
If strNameOfUser = ownername Then
SearchProcess = 1
'WScript.Echo "Process " & objProcess.Name & " is owned by " & "\" & strNameOfUser & "."
End If
End If
End If
Next
End If

End Function 
Реклама

Публикация приложений Oracle Application Express (APEX) через Apache http server (Apache) в режиме прокси

В моем случае, стала необходимость публиковать приложения разработанные в Oracle APEX в Интернет через DMZ (демилитаризованную зону), при этом не изменяя настроек соединения для пользователей локальной сети, которые подключаются через APEX Listener. Реализовать это все, было принято, с помощью Apache Http Server (Apache), который можно настроить как прокси-сервера, и он имеет свои средства защиты в дополнение к DMZ.

APEX DMZ


Какие версии дистрибутивов использовал:

Установка Oracle APEX и Oracle APEX Listener в этой статье не рассматриваются.


Инсталляция Apache Http Server

Сразу перейдем к установке и настройке Apache на машине (ОС Windows Server 2008 R2), входящей в DMZ.

1. Разархивируем скачанный архив дистрибутива Apache в корень диска C. Должен появиться каталог C:\Apache24.

Note: Если используете другой диск, тогда в имеющемся файле конфигурации Apache24/conf/httpd.conf поменяйте пути на свой диск. В этой статье я использовал имеющийся конфиг, который потом отредактировал под свои нужды.

2. Для инсталляции Apache, как сервис Windows требуется, чтобы на компьютере был установлен компонент Visual C++ Redistributable for Visual Studio 2012 Update 4, который можно взять отсюда http://www.microsoft.com/en-us/download/details.aspx?id=30679.

4. Инсталлируем Apache как сервис, для этого запускаем исполняемый файл httpd.exe с опциями: C:\Apache24\bin\httpd.exe -k install -n “AppWeb”

5. В файле «c:\Apache24\conf\httpd.conf» изменим порт слушателя с 80 (это по умолчанию) на 8090 (порт моего Apex Listener):
Listen 8090

6. Запустим Apache через httpd.exe (но можно запустить и через созданный сервис AppWeb в службах Windows):
C:\Apache24\bin\httpd.exe –k start

7. Проверим работу Apache. Для этого запустим интернет-браузер и введем адрес: http://localhost:8090

Если отобразилась страница с текстом: It works! => Apache работает.


Конфигурация Apache Htpp Server как прокси сервер и доступ к APEX-приложениям

Чтобы Apache работал как проски-сервер и имелся доступ только к определенным приложениям APEX, понадобятся модули mod_proxy и mod_rewrite, которые имеются в данном дистрибутиве.

mod_proxy – модуль позволяющий использовать Apache как прокси сервер (http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyvia).
mod_rewrite – модуль позволяющий динамически изменять URL, выполнять функции редиректа и проксирования (http://httpd.apache.org/docs/2.4/ru/mod/mod_rewrite.html#rewriterule).

Для осуществления задуманного, отредактируем файл конфигурации httpd.conf, добавив или раскомментировав некоторые строки. Ниже приведен конфигурация Apache с защитой от некоторых веб-атак (в этой статье не расписан полный ракурс осуществления защиты моих веб-приложений).

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http_module modules/mod_proxy_html.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so

Listen 8090
Timeout 30

ServerTokens Prod
ServerSignature Off 

AcceptFilter https none
AcceptFilter http none
EnableSendfile Off
EnableMMAP Off

RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1\.1$
RewriteRule .* - [F]

FileETag None
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"

ErrorDocument 404 "Sorry, but this page not found!"
ErrorDocument 502 "Sorry, but this resource is not available!"

# формат записей в логах
LogFormat "%h %l %u %t \"%{sessionID}C\" \"%r\" %>s %b %T" common

# задание виртуальной среды
NameVirtualHost dmzserv01:8090
<VirtualHost dmzserv01:8090>
 LogLevel Debug
 ProxyRequests Off
 ProxyPreserveHost On

Options -Indexes
 Options -FollowSymLinks
 Options -Includes -ExecCGI

<Proxy /apex>
 Order deny,allow
 Allow from all
 </Proxy>

# Проксирование на сайт apex
ProxyPass / http://apex.test.int:8090/
ProxyPassReverse / http://apex.test.int:8090/

# По умолчанию перебрасывает на приложение 135
#RewriteCond %{REQUEST_URI} /
#RewriteRule ^/$ /apex/f?p=135 [R]

# Доступ только к приложению 138 и 135
RewriteCond %{REQUEST_URI} /apex/f
RewriteCond %{QUERY_STRING} ^p=
RewriteCond %{QUERY_STRING} !^p=138
RewriteCond %{QUERY_STRING} !^p=135
RewriteRule ^.*$ - [F]

# логи действий и ошибок сайта apex
ErrorLog c:\Apache24\logs\apex_error.log
CustomLog c:\Apache24\logs\apex_access.log combined
</VirtualHost>

Теперь, если указать в браузере (Internet Explorer) http://dmzserv01:8090/apex/f?p=138, то сработаем проксирование на наш сайт apex через apex listener и получим доступ к приложению 138.

Если не работает, попробуйте в браузере добавить хост или ip машины Apache и Apex Listener в исключения прокси, или же в браузере в Безопасности — локальная сеть — добавьте адрес машины Apache и адрес машины Apex listener. Иногда требуется внесения некоторых изменений в файл c:\Windows\System32\drivers\etc\hosts.