Имя: Пароль:
1C
1С v8
узнать разрядность клиента 1С программно
, ,
0 novichok79
 
28.11.16
12:05
Доброго времени суток, уважаемые специалисты 1С!
Собственно возник вопрос в связи с появлением новой технологической платформы 8.3.9.1980. А как программно узнать какой разрядности запущен клиент - 32 или 64 бита? СистемнаяИнформация не дает такой инфы. Заранее благодарю за помощь.
1 novichok79
 
28.11.16
12:05
* очепятка: 8.3.9.1850
2 novichok79
 
28.11.16
12:06
вот например, инфа которую дает СистемнаяИнформация с моего домашнего компа:

ВерсияОС = version 6.2  (Build 9200)
ВерсияПриложения = 8.3.9.1850
ИдентификаторКлиента = f40139dc-6256-4768-b98d-a95347888bc0
ИнформацияПрограммыПросмотра =
ОперативнаяПамять = 32 642
Процессор = GenuineIntel Intel64 Family 6 Model 94 Stepping 3 3312 MHz
ТипПлатформы = Windows x86-64
3 novichok79
 
28.11.16
12:16
ИмяПриложения? не? но там разрядности насколько я знаю тоже нет.
4 Aleksey
 
28.11.16
12:17
А зачем?
5 Fragster
 
гуру
28.11.16
12:21
типплатформы, не?
6 Fragster
 
гуру
28.11.16
12:22
(4) чтобы из макета нужную ВК доставать
7 Fragster
 
гуру
28.11.16
12:22
например
8 Aleksey
 
28.11.16
12:24
(7) А какое дело ВК до разрядности клиента?
Ну там разрядность ОС я еще могу понять, но клиент то каким боком?

Можно пример из жизни?
9 Fragster
 
гуру
28.11.16
12:26
10 Живой Ископаемый
 
28.11.16
12:27
2(8) Например в ИР есть компоненты для парсинга и т.п. все 32-битные, в 64-битном клиенте выдают ошибки и не регятся
11 Fragster
 
гуру
28.11.16
12:27
12 Zamestas
 
28.11.16
12:30
(0) Проверь наличие папки "C:\Program Files (x86)"
13 Vladal
 
28.11.16
12:31
СистемнаяИнформация = Новый СистемнаяИнформация;
Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
...
ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
...
ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.linux_x86 Тогда
...
Иначе
...
КонецЕсли;
14 novichok79
 
28.11.16
12:32
(9) точно, оно самое.
15 novichok79
 
28.11.16
12:34
(13) хорошо. а если стоит 2 версии платформы, как узнать что конкретный вызов делается из под 64битного клиента?
16 novichok79
 
28.11.16
12:34
(12) а если в системе еще есть 32битные приложения?
17 marty0701
 
28.11.16
12:35
(15)Так тебе инфо по текущему клиенту и возвращается.
18 novichok79
 
28.11.16
12:39
(17) ясно, спасибо.
19 Serginio1
 
28.11.16
12:40
(6) Для этого есть манифест

http://www.miko.ru/blogs/portnovblog/107/
20 Fragster
 
гуру
28.11.16
12:41
(19) давай ВК для pdf417, которая так работает
21 Fragster
 
гуру
28.11.16
12:41
и чтобы в отчетность встраивалась еще бз бубна
22 Fragster
 
гуру
28.11.16
12:43
например просто под менить макет - и всё заработало
23 Serginio1
 
28.11.16
12:44
24 Serginio1
 
28.11.16
12:47
(20) А чего давать. .Net побарабану разрядность, если внутри не используют нативные библиотеки.
Например
https://github.com/codebude/QRCoder
25 Serg_1960
 
28.11.16
12:49
Автор спросил про разрядность клиента и ничего более. А вы обрадовались и уже во всю обсуждаете COM :)

Опять двадцать пять, опять баян про то, что разрядность процесса - это не разрядность ОС :(
26 Fragster
 
гуру
28.11.16
12:54
(25)->(14)->(9)
27 Fragster
 
гуру
28.11.16
12:54
учись телепатии
28 Garykom
 
гуру
28.11.16
13:02
Разрядность платформы 1С можно определить путем выполнения вычислений с числами и сравнения времени этих вычислений.
29 Garykom
 
гуру
28.11.16
13:04
(28)+ Еще операции с памятью на максимальный допустимый объем но это напрямую в 1С сложно и могут быть ограничения от операционки или физически.
30 Shamandafil
 
28.11.16
13:06
(0) Есть не надёжный способ посмотреть КаталогПрограммы() , если система х64, а каталог содержит х32, то клиент 32х битный, иначе 64х битный.
31 Vladal
 
28.11.16
13:07
(30) Что эта функция вернет в Линуксе?
32 Shamandafil
 
28.11.16
13:09
(31) Для линукса вроде всегда битность 1С совпадает с битностью системы. Да и в винде путь установки можно поменять.
33 Рэйв
 
28.11.16
13:12
(0)
WS = Новый COMОбъект("WScript.Shell");
    Сообщить(WS.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%"));
34 Garykom
 
гуру
28.11.16
13:18
(32) Ошибка в линуксе x86_64 прекрасно запускаются i386 приложения в т.ч. 1С.
Но с 1С проблемы с апачем будут
35 Рэйв
 
28.11.16
13:20
+(33)Не, точнее вот так:

//------
    WS = Новый COMОбъект("WScript.Shell");
    P = "x64";
    Если WS.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "x86"
        И    WS.ExpandEnvironmentStrings("%PROCESSOR_ARCHITEW6432%") = "%PROCESSOR_ARCHITEW6432%" Тогда
        P = "x86";
    КонецЕсли;
    Сообщить("->"+ P);
36 Garykom
 
гуру
28.11.16
13:21
(33) Узнаем разрядность системы а не платформы 1С запущенной.

Причем установлены могут быть разные платформы 1С, более надежно КаталогПрограммы() и далее смотрим что внутри.
37 Garykom
 
гуру
28.11.16
13:21
(35) Не поможет для (0)
38 Garykom
 
гуру
28.11.16
13:22
39 Рэйв
 
28.11.16
13:23
(37)так вк регить то в системе
40 Garykom
 
гуру
28.11.16
13:23
(39) 32 битные ВК прекрасно работают в 64 битной системе...
41 Shamandafil
 
28.11.16
13:25
(40) Но не в 64битном процессе. Под 8.3.9 выпущен 64битный клиент.
42 Рэйв
 
28.11.16
13:33
(40)судя по (10) не всегда
43 Shamandafil
 
28.11.16
13:36
(2) ТипПлатформы = Windows x86-64 - показывает что сейчас исполнение идёт в процессе х64.
ТипПлатформы = Windows x86 - в 32х битном
44 sitex
 
naïve
28.11.16
13:37
(0) Если только Windows клиенты то можно воспользоваться Wmic.
45 Shamandafil
 
28.11.16
13:38
Хотя, наверно, правильнее запаковать компоненты в zip-архив с манифестом, чтобы 1С сама выбирала подходящую версию компоненты.
46 Serginio1
 
28.11.16
13:48
(20) А в чем проблема с помощью манифеста запустить нужную DLL

Кстати через .Net можно решить так

http://stackoverflow.com/questions/9235684/which-free-c-sharp-library-can-generate-pdf-417-barcodes

Convert=Врап.ПолучитьТип("System.Convert");
ДД=Base64Значение(Convert.ToBase64String(GenerateBarCodeZXing(ШтрихКод)));
Картинка=Новый Картинка(ДД);
47 Shamandafil
 
28.11.16
13:51
(46) Но есть пара нюансов, надо иметь подходящую версию NET, зарегистрировать переходник под х32 и х64, а это требует прав администратора.
48 Serginio1
 
28.11.16
14:16
(47) Как правило Net обновляется, во вторых нужно зарегистрировать только одну библиотеку в третьих
http://www.cyberforum.ru/visual-basic/thread649325.html
Можно выгрузить нужную ветку и заменить HKEY_LOCAL_MACHINE на HKEY_CURRENT_USER
без прав администратора.
У меня все руки не доходят для регистрации без прав админа по нужному пути
49 Serginio1
 
28.11.16
14:18
(47) Переходник не нужен ибо .Net это Jit компиляция взависимости от разрядности текущего процесса.
Сборки как правило компилятся под AnyCpu если внутри не используются нативные библиотеки через InterOp
50 sitex
 
naïve
28.11.16
14:28
51 Shamandafil
 
28.11.16
14:53
(48) Не хватает установщика.
(49) Под переходником я подразумевал объект NetObjectToIDispatch45.
52 Вафель
 
28.11.16
14:57
(49) Всю отчетность тоже предлагаешь переписать?
53 Serginio1
 
28.11.16
14:57
Ну если она на 32 разрядных ActiveX то да.
54 ELEA26
 
28.11.16
15:05
Все не читал, но можно же проверить папку SysWOW64 в %SystemRoot%
Или проверить наличие Program Files (x86)
55 etc
 
28.11.16
15:11
Я не пойму а чем вам манифест не нравится? Архив с разными вариантами обработки с манифестом в макет и при подключении автоматически выбирается нужная. И кстате компонента которая с БСП идет умеет PDF417.
Они правда в БСП не обернули это дело в архив с манифестом. Так отдельно и лежат 4 вида.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший