 |
|
Как запретить запуск двух копий 1С8
Всем привет! У меня такой вопрос, казалось бы его уже тут разжевывали сто раз.
Как запретить запуск двух копий 1С8? Тут на форуме нашел тему и получил ответ на свой вопрос, но не до конца. Так как пользователи работают по RDP с 1С то нужна проверка.
Есть такой код который отлично работает под локальным пользователем:
Код:
bitVersion = "'64'"
strPath = "1cv8\8.3.10.2252\bin"
strProcess = "1cv8c.exe"
runProcess = "'1cv8c.exe'"
strcomputer = "."
set objwmiservice = getobject("winmgmts:" _
& "{impersonationlevel=impersonate}!\\" _
& strcomputer & "\root\cimv2")
set colprocesses = objwmiservice.execquery( _
"select name from win32_process " _
& "where name = " & runProcess)
if colprocesses.count = 0 then
set objshell = wscript.createobject("wscript.shell")
set objenv = objshell.environment("process")
If bitVersion = "'64'" Then
ProgramFilesPath = "%ProgramFiles%"
Else
ProgramFilesPath = "%ProgramFiles(x86)%"
End If
objshell.run """" + ProgramFilesPath + "\" + strPath + "\" + strProcess + ""
else
msgbox "Копия программы уже запущена. ", 48, "Внимание"
end if
Так же есть код:
Код:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery( _
"Select Name From Win32_Process " _
& "Where Name = '1cv8.exe'")
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objEnv = objShell.Environment("Process")
strCurrentUser = UCase(objEnv("UserDomain") & "\" & objEnv("UserName"))
For Each objProcess in colProcesses
If objProcess.GetOwner(strUser, strDomain) = 0 Then
If UCase(strDomain & "\" & strUser) = strCurrentUser Then
MsgBox "Копия программы уже запущена. ", 48, "Внимание"
Wscript.Quit
End If
End If
Next
objShell.Run """" + objEnv("ProgramFiles") + "\1cv81\bin\1cv8.exe"""
Тот и тот код vbs мне нравятся но связи с тем что я полный ноль в vbs помогите решить проблему. Суть проблемы такова. Я использую второй код, все бы ничего но тут проблема с путем к 1С он ProgramFiles а мне нужно ProgramFiles (х86) казалось ничего не обычного пропиши путь и будет тебе счастье. Прописал и не работает. Я думаю из-за того что в имени пробел и его нужно как-то экранировать либо прописовать путь через переменную как в первом примере где проверяться разрядность и пути к 1С. Помогите пожалуйста исправить второй код или первый для работы под RDP на текушего пользователя. Спасибо. Поиском пользовался ничего не нашел так же читал про vbs но реально нет времени его сейчас изучать.
|
Цитата:
Цитата ee0066
Я думаю из-за того что в имени пробел и его нужно как-то экранировать либо прописовать путь через переменную как в первом примере где проверяться разрядность и пути к 1С. »
|
Возвращает переменные окружения Windows, в Вашем случае нужно вернуть %ProgramFiles(x86)%, без пробела.
Код:
objShell.Run """" + objEnv("ProgramFiles(x86)") + "\1cv81\bin\1cv8.exe"""
|
Написал как вы посоветовали чудо не случилось так же не находит путь и не запускает 1С
Написал как вы посоветовали чудо не случилось так же не находит путь и не запускает 1С %ProgramFiles(x86)%
|
Petya V4sechkin |
22-09-2020 12:17 2934596 |
ee0066, можете тупо вписать свой путь:
Код:
objShell.Run """полный путь к EXE-файлу"""
|
Petya V4sechkin,
Код:
objShell.Run("""c:\ProgramFiles (x86)\1cv8\8.3.8.1675\bin\1cv8.exe""")
Ошибка: Не удается найти указанный файл
Спасибо большое NickM, ответ на вопрос получил и выкладываю рабочий код.
Код:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery( _
"Select Name From Win32_Process " _
& "Where Name = '1cv8.exe'")
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objEnv = objShell.Environment("Process")
strCurrentUser = UCase(objEnv("UserDomain") & "\" & objEnv("UserName"))
For Each objProcess in colProcesses
If objProcess.GetOwner(strUser, strDomain) = 0 Then
If UCase(strDomain & "\" & strUser) = strCurrentUser Then
MsgBox "Копия программы уже запущена. ", 48, "Внимание"
Wscript.Quit
End If
End If
Next
objShell.Run """" + objEnv("ProgramFiles(x86)") + "\1cv8\8.3.8.1675\bin\1cv8.exe"""
|
Время: 08:01.
© OSzone.net 2001-