1

Тема: Автоматический запуск 1С через VBScript

Ребят, всех приветствую!
В общем, у меня следующая задача: проверять запущена ли процесс 1cv7s.exe и если нет, то запускать 1С, а следом еще одну утилитку.
Решил реализовать ее на VBScript (как/где еще это можно сделать - не знаю - может кто подскажет варианты).
Как проверять процесс не знаю (может тоже подскажите?)... Пока пробую автоматически запуск 1С... В скрипте наткнулся на следующую проблему:

Set WshShell = Wscript.CreateObject("Wscript.Shell")
CmdLine = ""C:\Program Files\1Cv77\BIN\1cv7s.exe" enterprise /DG:\db\1C_SQL\ /N Adm /P 1"
WshShell.Run CmdLine, 1, True

Не может выполнить вторую строчку из-за кавычек... Структура задания переменной такая: var = "..." А у меня в описании самой переменной уже есть кавычки: "C:\Program Files\1Cv77\BIN\1cv7s.exe"
Как быть не знаю... :(smile:(
Также пробовал такие варианты:

CmdLine = """C:\Program Files\1Cv77\BIN\1cv7s.exe" enterprise /DG:\db\1C_SQL\ /N Adm /P 1""
CmdLine = Chr(34)& "C:\Program Files\1Cv77\BIN\1cv7s.exe" enterprise /DG:\db\1C_SQL\ /N Adm /P 1 &Chr(34)

Не помогло. По-прежнему пишет: "Предполагается наличие окончания инструкции"

Подскажите, пожалуйста...
Ну или может решение есть какое-нибудь другое...

Буду очень признателен!

2

Re: Автоматический запуск 1С через VBScript

Внутренние кавычки удваиваются:«… = """C:\Program Files\1Cv77\BIN\1cv7s.exe"" enterprise /DG:\db\1C_SQL\ /N Adm /P 1"»
Попробуйте так:

Option Explicit

Dim objSWbemServicesEx
Dim intProcessID

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv7s.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create( _
        """C:\Program Files\1Cv77\BIN\1cv7s.exe"" enterprise /DG:\db\1C_SQL\ /N Adm /P 1", _
        "G:\db\1C_SQL", Null, intProcessID) = 0 Then
        
        WScript.Echo "Process started successfully. PID: ", intProcessID
    Else
        WScript.Echo "Process started fail"
    End If
End If

WScript.Quit 0

3

Re: Автоматический запуск 1С через VBScript

Ещё как примеры:

1)    MsgBox """В кавычках"" сообщение"
2)    MsgBox """" & "В кавычках" & """" & " сообщение"
3)    MsgBox Chr(34) & "В кавычках" & Chr(34) & " сообщение"

4

Re: Автоматический запуск 1С через VBScript

alexii, VSVLAD - Спасибо большое, ребят! Буду знать!

alexii, Почему-то ваш код мне в любом случае выдает "Process started fail"... Но я сделал по примитивному:


Set WshShell = Wscript.CreateObject("Wscript.Shell")
CmdLine = """C:\Program Files\1Cv77\BIN\1cv7s.exe"" enterprise /DG:\db\1C_SQL\ /N Adm /P 1"
CmdLine2 = "ping.exe -n 20 127.0.0.1"

Dim objSWbemServicesEx
Dim intProcessID


Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv7s.exe'").Count = 0 Then
        WshShell.Run CmdLine, 1, False
    WScript.Sleep 3000
        WshShell.Run CmdLine2, 1, True
Else    
        WScript.Quit 0
      
End If

WScript.Quit 0

Вот так вроде работает
Огромное спасибо!

5

Re: Автоматический запуск 1С через VBScript

Ребят, а не подскажите плиз, как записывать инфу файл? Мне надо каждый раз, когда не удалось запустить процесс писать в файл след. инфу:
Время: Не удалось запустить файл.

Ну как получать текущее время и дату, я надеюсь что найду Проблема с записью файл:

Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\testfile.txt", True)

...

Else    
    WScript.Echo "Process started fail"
    tf.WriteLine("Не удалось запустить процесс.")
    tf.Close
        WScript.Quit 0

Таким образом файл каждый раз обновляется, а мне надо, чтобы строчки добавлялись (лог все-таки).

6

Re: Автоматический запуск 1С через VBScript

Все, я болван. Надо вообще файл открывать на добавление, а я его заново создаю =/
Подскажите, пожалуйста, как одной строкой вот это можно оформить?

    tf.Write(time)
    tf.WriteLine(" Не удалось запустить процесс.")

7

Re: Автоматический запуск 1С через VBScript

The_Immortal пишет:

alexii, Почему-то ваш код мне в любом случае выдает "Process started fail"...

The_Immortal, у меня работает:

Option Explicit

Dim objSWbemServicesEx
Dim intProcessID

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv7s.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create( _
        """C:\Program Files\1Cv77\BIN\1cv7s.exe"" enterprise /dE:\Песочница\Buch\1SBDB /nAdm /p1", _
        "E:\Песочница\Buch\1SBDB", Null, intProcessID) = 0 Then
        
        WScript.Echo "Process started successfully. PID: ", intProcessID
    Else
        WScript.Echo "Process started fail"
    End If
End If

WScript.Quit 0
Process started successfully. PID:  1992

Смотрите правильность и существование путей.

The_Immortal пишет:

Ребят, а не подскажите плиз, как записывать инфу файл?

Один вопрос — одна тема: §3.11.