Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   Как запретить запуск двух и более копий 1С8 (http://forum.oszone.net/showthread.php?t=145476)

ragnar40 17-07-2009 22:43 1170979

Как запретить запуск двух и более копий 1С8
 
В магазинах установлены компы с 1С-8. Продавцы запускают несколько копий программы с ярлыка. Натворили дел уже, замаялись расхлебывать. Как запретить запуск более одной копии?

El Scorpio 18-07-2009 06:47 1171143

Должностной инструкцией и увольнением особо отличившихся "работничков" по причине полного служебного несоответствия

ragnar40 18-07-2009 07:24 1171154

Это не не решение проблемы. Кадровый голод у нас, работников не найти. Как программными средствами избавиться от такой засады?

mailfannah 18-07-2009 13:04 1171266

ragnar40, ну а нельзя перед запуском смотреть есть ли программа в списке процессов и если есть, то не запускать?

ragnar40 18-07-2009 19:24 1171471

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

Coutty 18-07-2009 19:35 1171478

Создайте .cmd (.bat)-файл с таким содержимым:
Цитата:

SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe
Где вместо notepad.exe нужно указать имя вашей программы. И, видимо, во втором вхождении (там, где start) - полный путь к файлу. И пусть запускают этой cmd'шкой.

Источник:
1. Постановка задачи: http://forum.oszone.net/post-896385-321.html
2. Решение: http://forum.oszone.net/post-896385-322.html

Petya V4sechkin 18-07-2009 19:48 1171483

ragnar40, можно в свойствах ярлыка подменить запуск exe-шника на такой vbs-скрипт:
Код:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery( _
    "Select Name From Win32_Process " _
    & "Where Name = '1cv8.exe'")

If colProcesses.Count = 0 Then
  Set objShell = Wscript.CreateObject("Wscript.Shell")
  Set objEnv = objShell.Environment("Process")
  objShell.Run """" + objEnv("ProgramFiles") + "\1cv81\bin\1cv8.exe"""
Else
  MsgBox "Копия программы уже запущена. ", 48, "Внимание"
End If


ragnar40 18-07-2009 19:57 1171487

Ерунда какая-то. При запуске не может найти екзешник. Я не программист, я чайник, который комп 2 года назад увидел.

Petya V4sechkin 18-07-2009 19:59 1171489

ragnar40, в какой папке exe-шник и как называется?

ragnar40 18-07-2009 20:13 1171497

C:\Program files\1cv8\bin\1cv8.exe

Petya V4sechkin 18-07-2009 20:15 1171499

ragnar40, тогда строчку в скрипте исправьте:
Код:

  objShell.Run """" + objEnv("ProgramFiles") + "\1cv8\bin\1cv8.exe"""

ragnar40 18-07-2009 21:09 1171523

Вот так прямо выложить на рабочий стол и им запускать?

EvgeniuXP 18-07-2009 23:31 1171602

Цитата:

Цитата ragnar40
Вот так прямо выложить на рабочий стол и им запускать? »

и иконку на рабочем столе смени на 1С 8.х, чтобы ваши "грамотеи" думали что всё-таки запускают 1С 8.х. :)

ragnar40 19-07-2009 06:51 1171712

Спасибо огромное, скриптик подошел прекрасно, проблема решена.

sergant138 23-07-2009 09:51 1175309

Мне нужно решить такую же задачу с 1c, но я что-то не пойму куда копировать этот скрипт в свойствах ярлыка. Ткните пальцем куда скопировать его!

Petya V4sechkin 23-07-2009 09:59 1175314

sergant138, скрипт сохранить в файле с расширением .vbs
В свойствах ярлыка указать путь к этому файлу.

sergant138 23-07-2009 10:18 1175328

Спасибо!Все Работает!

ragnar40 23-07-2009 20:56 1175963

Во как! Не у меня одного такая проблема.

pata 26-04-2010 18:40 1401198

А как запретить запуск копии в терминале для пользователя

Sinus 19-04-2013 15:31 2135878

Цитата:

Цитата Coutty
Создайте .cmd (.bat)-файл с таким содержимым:
Цитата:
SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe
Где вместо notepad.exe нужно указать имя вашей программы. И, видимо, во втором вхождении (там, где start) - полный путь к файлу. И пусть запускают этой cmd'шкой. »

А как изменить условие, нужно что бы запускалось 2 копии программы но НЕ 3 ?

Petya V4sechkin 19-04-2013 15:43 2135895

Цитата:

Цитата Sinus
что бы запускалось 2 копии программы но НЕ 3 ?

Заменить строку:
Код:

If colProcesses.Count = 0 Then
на:
Код:

If colProcesses.Count < 2 Then

Sinus 19-04-2013 15:52 2135902

Меня интересует как изменить именно этот код, vbs-скрипт не подходит =)

Цитата:

Цитата Sinus
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 2751456

Немного причесал выложенный више 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 По ссылке есть портативная версия без установки.

lxa85 14-07-2017 23:07 2751473

А если версия платформы изменится? Path исправлять?
А если надо в нескольких версиях работать?
Своя бухгалтерия в одной версии, а дочерней фирмы в другой?
Почему это не решается на уровне Конфигуратора 1С?
Хотя именно там это и надо решать.
Три года назад решали подобную задачу.
Хорошо бы указывать платформу и конфигурацию. Они довольно сильно обновляются.
УТ, УПП Конфигуратор
Код выполняемый при запуске

Iska 15-07-2017 00:39 2751493

Цитата:

Цитата Anoxiety
Для компиляции в .exe »

Спрашивается — нахрена зачем?! До усрачки нужен именно исполняемый файл — делаются косметические изменения в коде, который затем компилируется консольным vbc.exe, идущим в комплекте .Net Framework.

ekoshko 31-08-2017 15:14 2761687

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

Petya V4sechkin 31-08-2017 20:24 2761741

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 2765714

подскажите пожалуйста как сделать чтобы на терминальном сервере скрипт запускал проверку процесса у текущего пользователя и запускал 1с не более 5 раз?

Вариант 11-05-2018 11:49 2813136

А что даёт в "причёсанном" коде строчка strPath = "1cv8\8.3.10.2252\bin" ? Что вообще означает strPath?
Спасибо.

Iska 11-05-2018 12:08 2813141

Цитата:

Цитата Вариант
в "причёсанном" коде »

Что Вы подразумеваете под «"причёсанным" кодом»?

Цитата:

Цитата Вариант
А что даёт … строчка strPath = "1cv8\8.3.10.2252\bin" ? »

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

Цитата:

Цитата Вариант
Что вообще означает strPath? »

Ничего не означает, это просто имя переменной.

Вариант 11-05-2018 12:32 2813148

Цитата:

Цитата Iska
Что Вы подразумеваете под «"причёсанным" кодом»? »

Так это не я, а автор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 2813152

Вариант, ясно. Если это называть «причёсыванием», то лучше быть лысым.

Цитата:

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

Не заморачивайтесь. Для Ваших целей хватит исходного варианта.

Вариант 11-05-2018 13:00 2813157

Цитата:

Цитата Iska
Не заморачивайтесь. Для Ваших целей хватит исходного варианта. »

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

Iska 11-05-2018 14:02 2813165

Вариант, что объяснить? Что в процессе причёсывания получился кривой и горбатый код? Что никакой
Цитата:

Цитата Вариант
автоматизацию для 32 и 64 битных версий программы »

там и близко не пахнет — человек заводит переменную objenv и нигде более не использует, а затем тупо сравнивает две абсолютно идентичных строки — в переменной и текстовую строку — и, как результат, ProgramFilesPath у него всегда будет равен %ProgramFiles% и никогда — %ProgramFiles(x86)%? Что никакой нужды в заведении двух переменных strProcess = "1cv8c.exe" и runProcess = "'1cv8c.exe'" нет совершенно?

Цитата:

Цитата Вариант
для чего эта строка? »

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

Ну, если Вам. как Вы пишете:
Цитата:

Цитата Вариант
Всё остальное понятно, »

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


Время: 23:31.

Время: 23:31.
© OSzone.net 2001-