Войти

Показать полную графическую версию : Приостановка или перезапуск процесса


solomonkane
17-09-2014, 11:39
Здравствуйте!
Отправляю файл на почту в письме через vbs скрипт, файл для отправки 1 постоянно перезаписывется и обновляется круглосуточно программой, запущенной от имени админ-пользователя.
Когда запускается скрипт он отсылает письмо, но без вложения, т.к. этот файл мониторит(используется) запущенной программой.
Можно ли переделать скрипт ниже, чтобы он находил этот процесс не по имени сразу, а по расположению, потом устранял и перезапускал его после отправки почты?
Ну или как-то взаимодействовать с bat/cmd?
On Error Resume Next
Dim o_Mess, v_Conf
v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
Set o_Mess = CreateObject("CDO.Message")
With o_Mess
.To = "TO"
.From = "FROM"
.Subject = "HeLLo"
.TextBody = "*msg*"
.AddAttachment "C:\users\PC\app data\programdir\file.zip"
.TextBodyPart.Charset = "windows-1251"
With .Configuration.Fields
.Item(v_Conf & "sendusing") = 2
.Item(v_Conf & "smtpserver") = "smtp.mail.ru"
.Item(v_Conf & "smtpauthenticate") = 1
.Item(v_Conf & "sendusername") = "FROMLOGIN"
.Item(v_Conf & "sendpassword") = "PASS"
.Item(v_Conf & "smtpserverport") = 25
.Item(v_Conf & "smtpusessl") = False
.Item(v_Conf & "smtpconnectiontimeout") = 65
.Update
End With
.send
End With
Set o_Mess = Nothing

Iska
17-09-2014, 12:10
solomonkane, на какой ОС работает «круглосуточно программа, запущенная от имени админ-пользователя»?

solomonkane
17-09-2014, 12:25
Iska, windows 7

вот сам нарыл только это, может поможет в решений данной проблемы, но немного не то:

Restart Program Script:

set Service = GetObject ("winmgmts:")
set Shell = WScript.CreateObject("WScript.Shell")

'Name of the exe we want to watch
sEXEName = "processing.exe"
'Path of the folder it is in (Don't forget the trailing \)
sApplicationPath = "C:\process\"

'Loop until the system is shutdown or user logs out
while true
bRunning = false

'Look for our application. Set the flag bRunning = true
'If we see that it is running

for each Process in Service.InstancesOf ("Win32_Process")
if Process.Name = sEXEName then
bRunning=true
End If
next

'Is our app running?

if (not bRunning) then
'No it is not, launch it
Shell.Run Chr(34) & sApplicationPath & sEXEName & Chr(34)
end if

'Sleep a while so we do not hog the cpu
WScript.Sleep(2000)

wend

только следит чтоб программа не закрывалась и постоянно висит в процессах

Iska
17-09-2014, 12:55
solomonkane, я бы, вместо того, чтобы снимать процесс, попробовал использовать теневую копию.

Теневая копия — Википедия (http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BD%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BF%D0%B8%D1%8F)
Volume Shadow Copy Service (http://technet.microsoft.com/ru-ru/library/ee923636(v=ws.10).aspx)
Shadow Copy из командной строки | PowerShell и другие скрипты (http://xaegr.wordpress.com/2008/11/30/shadow-copy-%D0%B8%D0%B7-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8/)

solomonkane
17-09-2014, 16:11
Iska, спасибо за ответ :)
тогда у меня еще вопрос.
чтобы не заморачиваться с сервисами наверно проще этот файл скопировать а потом уже отправлять,
а как батником или в скрипте почты (ну или отдельно) зделать, так, чтобы:
искал нужный файл в ЗАДАННОЙ папке или диске, когда найдет копировал в другую папку создавая ее если не существует, а если папка уже есть - копирование в нее с перезаписью
и еще учитывать пробелы в имени файла и папок?

Iska
17-09-2014, 16:42
чтобы не заморачиваться с сервисами наверно проще этот файл скопировать а потом уже отправлять, »
«Заморачиваться», я полагаю. придётся.

а как батником или в скрипте почты (ну или отдельно) зделать, так, чтобы:
искал нужный файл в ЗАДАННОЙ папке или диске, когда найдет копировал в другую папку создавая ее если не существует, а если папка уже есть - копирование в нее с перезаписью
и еще учитывать пробелы в имени файла и папок? »
Данный вопрос как-то относится к текущей теме?




© OSzone.net 2001-2012