Имя: Пароль:
1C
1С v8
Как определить разрядность ОС штатными методами без ВК, COM и set>xxx ?
0 smaharbA
 
16.10.13
03:15
Есть ли встроенный метод определения разрядности ОС при работе с x86 платформой в файловом варианте ?
Методы типа Вычислить("Новый Файл(""C:\windows\syswow64"")").Существует() не подходит по ряду критериев.
1 smaharbA
 
16.10.13
03:19
+ хотя конечно, определив диск(и) с наличием характерного пути к каталогу - будет резервным методом, после штатного (если таковой имеется), COM-объектом и ЗапускПриложения("cmd /q /c set...
2 mistеr
 
16.10.13
04:00
Очевидно, что нет и не положено. Учетные функции не должны зависеть от разрядности оси.

Пусть то, для запуска чего надо это знать, само определяет.
3 smaharbA
 
16.10.13
07:48
(2) а нафига тогда положено знать разрядность платформы ?
4 Necessitudo
 
16.10.13
08:13
СистемнаяИнформация.ТипПлатформы?
5 banco
 
16.10.13
08:16
СисИнфо = Новый СистемнаяИнформация;
Сообщить(СисИнфо.ВерсияОС);
6 smaharbA
 
16.10.13
09:42
(5)

Вычислить("Новый СистемнаяИнформация").ВерсияОС

version 6.2  (Build 9200)

какая разрядность ?
7 dmpl
 
16.10.13
09:46
(6) ТипПлатформы юзай.
8 Serg_1960
 
16.10.13
09:49
КаталогПрограммы, КаталогВременныхФайлов - не комильфо.
9 smaharbA
 
16.10.13
09:55
(7)

Вычислить("Новый СистемнаяИнформация").ТипПлатформы

Windows x86

тем не менее windows 2012
10 smaharbA
 
16.10.13
09:55
КаталогПрограммы конечно даст намек
11 Serg_1960
 
16.10.13
10:09
Из старых запасов :)
КомандаСистемы("@echo %os%>"+КаталогПользователя()+"os.txt");
12 hhhh
 
16.10.13
10:24
(10) регистр сведений заведи, чего ты паришься? Измерение "ИмяКомпьютера", ресурс "Разрядность". Всё.
13 Kandellaster
 
16.10.13
10:29
взять разрядность можно из WMI посредством того же VBS или PowerShell, а динамически запустить внутри кода скрипт и получить ответ от него проблем нет.
14 smaharbA
 
16.10.13
10:29
(11) как бы в сабже написано о нежелании подобного, правильнее тогда так

ЗапуститьПриложение("cmd /q /c if defined PROCESSOR_ARCHITEW6432 mkdir .",,Истина,КодВозврата);
Сообщить(КодВозврата);


(12) я не знаю с каких компьютеров заходят, да и ос вполне так меняема
15 smaharbA
 
16.10.13
10:29
(13) Вы сабж читали ?
16 hhhh
 
16.10.13
10:33
(14) как не знаешь с каких компьютеров?

ИмяКомпьютера (ComputerName)
Синтаксис:

ИмяКомпьютера()
Возвращаемое значение:

Тип: Строка.
Сетевое имя компьютера.
Описание:

Получает сетевое имя компьютера.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
17 Зойч
 
16.10.13
10:33
(9) На клиенте всегда 32 бита
18 Питерский_
Никола
 
16.10.13
10:39
(17) ОСь может быть и 64 разряда, почему нет ? В сабже иммено разрядность ОСи интересна.
19 le_
 
16.10.13
10:44
(0) C пом. COM:
ИмяКомпьютера = ".";
oReg = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера + "\root\default:StdRegProv");
strValue = "";
oReg.GetStringValue(2147483650, "HARDWARE\DESCRIPTION\System\CentralProcessor\0", "Identifier", strValue);

Если Найти(strValue, "64") <> 0 Тогда
    Сообщить("x64");
ИначеЕсли Найти(strValue, "x86") <> 0 Тогда
    Сообщить("x86");
КонецЕсли;
20 Зойч
 
16.10.13
10:53
(18) ибо тип ПЛАТФОРМЫ. Только сервер может быть x64
21 smaharbA
 
16.10.13
10:53
(19) это однозначно говорит о разрядности системы ?
(да и в сабже как бы о внутренних механизмах приложения)

так то методов масса, один из простых и вполне достоверных, возвращать значение будет не по наличию или отсутствию какого либо каталога или значения


Не Вычислить("Новый COMОбъект(""shell.application"")").Namespace(41)=Неопределено
22 smaharbA
 
16.10.13
10:54
(20) см (7)
23 Зойч
 
16.10.13
10:54
(11) @echo %os% = Windows_NT
24 Зойч
 
16.10.13
10:56
Не раскрыт вопрос ЗАЧЕМ
25 smaharbA
 
16.10.13
10:59
(19)

Вычислить("Новый COMОбъект(""wscript.shell"")").RegRead("HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\Identifier")
Intel64 Family 6 Model 42 Stepping 7

как тут понять, что ОС, или даже сам процессор 64-х разрядный ?
26 smaharbA
 
16.10.13
10:59
(24) к автору это вопрос не относятся
27 Зойч
 
16.10.13
11:00
Все таки уже ком подходит?
28 smaharbA
 
16.10.13
11:01
Для сервера и наверное для вебклиента есть вариант с ComSafeArray, для толстого не подходит
29 smaharbA
 
16.10.13
11:01
(27) нет, нежелателен, в сабже об этом указано
30 smaharbA
 
16.10.13
11:02
как комом и прочим определить именно однозначно довольно просто
31 Зойч
 
16.10.13
11:02
(29) и тут же начинают все перебирать разные комы ))
32 Лефмихалыч
 
16.10.13
11:02
(3) кому положено?
33 smaharbA
 
16.10.13
11:03
(31) через пост и поясняю - нужен внутренний механизм программы (
34 Зойч
 
16.10.13
11:03
(32) разрядность платформы нужно знать. Ибо компоненты под разные разрядности- разные
35 Зойч
 
16.10.13
11:03
(33) ну тебе сказали что нету
36 Лефмихалыч
 
16.10.13
11:03
зачем это надо определять вообще?
37 smaharbA
 
16.10.13
11:04
(32) для чего
СистемнаяИнформация.ТипПлатформы ?
38 le_
 
16.10.13
11:04
(33) Зачем именно внутренний механизм? Брезгуешь системными COM-серверами?..
39 Лефмихалыч
 
16.10.13
11:04
(34) не использовать гогнокопоненты, которые то работают, то нет - ниварянт?
40 smaharbA
 
16.10.13
11:04
(38) нет, не брезгую
41 Лефмихалыч
 
16.10.13
11:05
(37) ояипу?.. ни когда не понимал
42 Зойч
 
16.10.13
11:05
Если пишешь какую то хрень, то почему бы не юзать ком, вк и прочую лабуду.
А если пишешь что-то нормальное, то не должно зависеть
43 Зойч
 
16.10.13
11:05
(39) Пичать штрихкодов - гогнокомпонента или нет?
44 Лефмихалыч
 
16.10.13
11:06
(43) если ей не пох на разрядность, то гогнокомпонента
45 Зойч
 
16.10.13
11:07
(44) как может быть пох? Приведи хоть один пример такой компонетны
46 le_
 
16.10.13
11:08
(25) Проц. - по цифирьке 64 после Intel.
47 smaharbA
 
16.10.13
11:08
с ком-массивом все просто пробуем поставить VT_UI8 и задать значение, но это думается будет работать только на сервере или еще в какм вебе
48 smaharbA
 
16.10.13
11:08
(46) проц ладно, хотя не факт, а ОС ?
49 dmpl
 
16.10.13
11:12
(34) А что, 64-битный сервер работает с 32-битным клиентом?
50 smaharbA
 
16.10.13
11:12
проверьте на сервере у кого 64-х

код типа

Массив=Новый COMSafeArray("VT_UI8",1);
Попытка
    Массив.SetValue(0,0);
    Это64=Истина;
Исключение
    Это64=Ложь;
КонецПопытки;

и такой

Массив=Новый COMSafeArray("VT_UINT",1);
Попытка
    Массив.SetValue(0,Pow(2,64)-1);
    Это64=Истина;
Исключение
    Это64=Ложь;
КонецПопытки;
51 dmpl
 
16.10.13
11:13
(46) А если на VIA запустят?
52 smaharbA
 
16.10.13
11:19
(49) а разве нет ?
53 le_
 
16.10.13
11:20
(51) У меня нет VIA, чтобы попробовать.
В любом случае, это можно сделать с пом. COM. И гугл выдаст несколько различных вариантов. И по архитектуре процессора и по разрядности платформы.
Например, еще вариант:
MsgBox CreateObject("WScript.Shell").Environment("System")("PROCESSOR_ARCHITECTURE")
54 smaharbA
 
16.10.13
11:24
(53) и вернет x86, нужно несколько иначе PROCESSOR_ARCHITEW6432
55 Serg_1960
 
16.10.13
11:40
Не в курсе, сильно ногами не пинайте.

А может быть так, что пользователю урежут права и проблемно станет запускать скрипты, вызывать ком-ы и читать ветки реестра? Тогда smaharbA может пролететь даже с "правильным" кодом проверки разрядности...