Упаковка файлов

Тема в разделе "Lotus - Программирование", создана пользователем Gandliar, 21 ноя 2013.

  1. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Привет!

    Помогите пожалуйста решить проблему

    запускается серверный агент с кодом

    Код (LotusScript):
        Print "start+"
    Dim WShell As Variant
    Dim id As Long 
    Dim command_message As String          
    Set WShell = CreateObject("WScript.Shell")     
    id = WShell.Run(command_message, 0, True)      
    If Not id=0 Then
    error_message = "Возникла проблема при выполнении командной строки '"+command_message+"'"                  
    Print error_message
    End If 
    Print "end+"
    несколько раз. После очередного запуска выдается ошибка Agent 'test' error: Cannot create automation object

    Помогает перезагрузка сервера лотус, потом происходит все аналогично.

    Помогите побороть проблему.

    Сервера lotus 5,5 и 6.0, системы - виртуалки windows 2003r2, скрипт сохраняется в 5,5 дизайнере


    Причем заметил такую особенность. Если код вынести в библиотеку - то объект сразу не может создать.

    Заранее благодарю.
     
  2. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    А без WScript никак не обойтись? Обычным батником? Я бы вообще не рискнул бы использовать какое-либо OLE на сервере, даже если бы оно у меня было :)

    По существу вопроса - я не знаю WScript - многопоточный? Несколько экземпляров скрипт сервера можно инициализировать? Подозреваю, что оно занято предыдущим сеансом работы или зависло, а другой экземпляр инициализировать нельзя или можно, но ограниченное количество, и всё это количество уже запущено. Вы их, кстати, как то прибиваете по окончанию работы вашего скрипта?

    Про OLE - попробуйте сначала использовать GetObject и если объект не получен, то тогда уже CreateObject.
     
  3. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    WScript как раз и запускает обычный батник

    на локале работает все отлично, на сервере - обычно со второго раза уже не запускается.

    Wscript нужен чтобы дождаться исполнения батника (обычно в нем идет упаковка файлов и может занимать длительное время)
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а чем вам обычный Shell не угодил?
     
  5. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    wscript ожидает завершения процесса а обычный shell нет
    вот буду пробовать извращаться с shell
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Gandliar
    Журнали рование в винде смотрели? может какие логи пишет система.
     
  7. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Смотрел - нету там ничего

    Я думаю проблема в лотус-сервере, 1 раз выполняет, второй раз - ошибка, помогает перезагрузка сервера
    То есть видимо не освобождает объект почему-то
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    так, ок...
    Может garrick прав, попробовать получить через GetObject и если нет то создавать?

    А если через Exec делать?
    http://www.script-coding.com/WSH/WshShell.html#1.
    Тогда можно будет батник запустить в дочернем потоке Ws, еще и управлять им немного.
    Но есть подозрение, что тогда точно надо будет через GetObject идти первоначально.
     
  9. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    через getObject - все равно пишет cannot create automation object

    видимо оле на лотус-сервере падает почему-то
     
  10. Domino-Designer

    Domino-Designer Lotus team
    Lotus team

    Регистрация:
    6 дек 2011
    Сообщения:
    123
    Симпатии:
    5
    По завершению агента
    Set WShell = Nothing

    Лотус сам этот процесс не закроет
     
  11. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    и так тоже пробовал - не помогает.

    Написал на батниках

    Код (LotusScript):
    Function shellAndWait(commandList List As String, waitMax As Long) As Variant
    Dim filePathTmp As String
    filePathTmp = Environ("Temp")
    Dim fileName As String
    fileName = Format(Cstr(Now), "yyyymmddhhnnss")+Cstr(Int(Rnd()*1000))
    'Создадим батник 
    Dim fileNum As Integer
    fileNum = Freefile()   
    Open filePathTmp+"\"+fileName+".bat" For Output As FileNum
    Forall c In commandList
    Print #FileNum, c      
    End Forall
    'Впишем последней строкой копирование файла
    Print #FileNum, "copy "+filePathTmp+"\"+fileName+".bat"+" "+filePathTmp+"\"+fileName+".bak"
    Close FileNum  
    Dim id As Integer  
    id = Shell(filePathTmp+"\"+fileName+".bat")
    'Проверим в цикле наличие файла
    Dim i As Long
    For i = 1 To waitMax
    If Not Dir$(filePathTmp+"\"+fileName+".bak",0)="" Then
    Kill filePathTmp+"\"+fileName+".bat"
    Kill filePathTmp+"\"+fileName+".bak"
    shellAndWait = True
    Exit Function
    End If
    Sleep 1
    Next       
    End Function
     
  12. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Gandliar
    У Вас на сервере Java не работает?
     
  13. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Всё понятно. WScript вам не нужен. Вам нужно переписать вашего агента на Java. Если с Java не дружите, то ЭТО должно помочь вам.
     
  14. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а то что шелл возвращает ИД процесса который из лотуса можно спокойно мониторитьи отследить когда он завершился вам мало? ;)
     
  15. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Первая ссылка с поиска помогла, апишная функция работает похоже стабильно.

    Большое спасибо всем кто откликнулся.
     
  16. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Ну, это пока у вас сервак на винде ;)
     
Загрузка...

Поделиться этой страницей