PDA

Показать полную графическую версию : Как запретить запуск двух и более копий 1С8


Страниц : 1 [2]

Petya V4sechkin
19-04-2013, 15:43
что бы запускалось 2 копии программы но НЕ 3 ?
Заменить строку:
If colProcesses.Count = 0 Then
на:
If colProcesses.Count < 2 Then

Sinus
19-04-2013, 15:52
Меня интересует как изменить именно этот код, vbs-скрипт не подходит =)

SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe »

Anoxiety
14-07-2017, 20:13
Немного причесал выложенный више vbs скрипт


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


Для компиляции в .exe удобно использовать утилиту Vbs To Exe (http://www.f2ko.de/en/v2e.php) По ссылке есть портативная версия без установки.

lxa85
14-07-2017, 23:07
А если версия платформы изменится? Path исправлять?
А если надо в нескольких версиях работать?
Своя бухгалтерия в одной версии, а дочерней фирмы в другой?
Почему это не решается на уровне Конфигуратора 1С?
Хотя именно там это и надо решать.
Три года назад решали подобную задачу. (http://forum.oszone.net/thread-283392.html)
Хорошо бы указывать платформу и конфигурацию. Они довольно сильно обновляются.
УТ, УПП Конфигуратор (http://www.forum.mista.ru/topic.php?id=602040)
Код выполняемый при запуске (http://infostart.ru/public/204257/)

Iska
15-07-2017, 00:39
Для компиляции в .exe »
Спрашивается — нахрена зачем?! До усрачки нужен именно исполняемый файл — делаются косметические изменения в коде, который затем компилируется консольным vbc.exe, идущим в комплекте .Net Framework.

ekoshko
31-08-2017, 15:14
Можно ли в этом скрипте сделать проверку запущенного процесса у текущего пользователя?
Если на терминальном серваке куча пользователей работает с 1С, текущему говорит Копия программы уже запущена.

Petya V4sechkin
31-08-2017, 20:24
ekoshko, пример:
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"""

При необходимости скорректируйте путь/имя исполняемого файла 1С.

Stasan22
20-09-2017, 11:55
подскажите пожалуйста как сделать чтобы на терминальном сервере скрипт запускал проверку процесса у текущего пользователя и запускал 1с не более 5 раз?

Вариант
11-05-2018, 11:49
А что даёт в "причёсанном" коде строчка strPath = "1cv8\8.3.10.2252\bin" ? Что вообще означает strPath?
Спасибо.

Iska
11-05-2018, 12:08
в "причёсанном" коде »
Что Вы подразумеваете под «"причёсанным" кодом»?

А что даёт … строчка strPath = "1cv8\8.3.10.2252\bin" ? »
Даёт присвоение значения текстовой строки "1cv8\8.3.10.2252\bin" переменной strPath.

Что вообще означает strPath? »
Ничего не означает, это просто имя переменной.

Вариант
11-05-2018, 12:32
Что Вы подразумеваете под «"причёсанным" кодом»? »
Так это не я, а авторAnoxiety, написал что причесал сообщ. №23, http://forum.oszone.net/post-2751456-23.html
А "причёсывал" он код вот из этого сообщения № 7 http://forum.oszone.net/post-1171483-7.html
Поэтому я и спросил, для чего там появилась эта строка, в чём разница? А так, первый вариант скрипта вполне работает для блокнота. А спрашиваю, т.к. хочу и для других программ использовать, поэтому не пойму что в эту строку забивать, для чего она?
Спасибо.

Iska
11-05-2018, 12:49
Вариант, ясно. Если это называть «причёсыванием», то лучше быть лысым.

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

Вариант
11-05-2018, 13:00
Не заморачивайтесь. Для Ваших целей хватит исходного варианта. »
Ну объясните пожалуйста на пальцах, для лохов, если можете :) для чего эта строка? Всё остальное понятно, он добавил автоматизацию для 32 и 64 битных версий программы, а вот какую функцию добавил этой строкой (даже двумя), в чём её суть?

Iska
11-05-2018, 14:02
Вариант, что объяснить? Что в процессе причёсывания получился кривой и горбатый код? Что никакой
автоматизацию для 32 и 64 битных версий программы »
там и близко не пахнет — человек заводит переменную objenv и нигде более не использует, а затем тупо сравнивает две абсолютно идентичных строки — в переменной и текстовую строку — и, как результат, ProgramFilesPath у него всегда будет равен %ProgramFiles% и никогда — %ProgramFiles(x86)%? Что никакой нужды в заведении двух переменных strProcess = "1cv8c.exe" и runProcess = "'1cv8c.exe'" нет совершенно?

для чего эта строка? »
Заведена была как неудачная попытка разделения пути к исполняемому файлу на части, дабы попытаться учесть разные пути к x86 и x64.

Ну, если Вам. как Вы пишете:
Всё остальное понятно, »
то могу только посочувствовать. Ещё раз повторяю: забудьте этот код как страшный сон.




© OSzone.net 2001-2012