Имя: Пароль:
1C
1С v8
Значение из реестра
0 ПульсЪ
 
17.09.12
14:52
Подскажите, че сделать

шелл = Новый COMОбъект("WScript.Shell");
Значение = шелл.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate");


возвращает 0, а надо что бы возвращало значение которое есть там

в то же время делаю

шелл = Новый COMОбъект("WScript.Shell");
Значение = шелл.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName");

все отлично работает.

заметил что первое имеет значение Reg_SZ, а второе Reg_Dword

вообщем надо получить дату установки винды
1 golden-pack
 
17.09.12
14:53
(0) да, не в тему, знаю .... зачем дата установки винды ?
2 ПульсЪ
 
17.09.12
14:54
(1) проверочку одну делаю, не скажу какую ))
3 ПульсЪ
 
17.09.12
15:14
ап апыч
4 0Mint
 
17.09.12
15:15
Тебе надо из Hexadecimal в Decimal конвертить в WsScript.
5 ПульсЪ
 
17.09.12
15:21
(4) а кусок кода можно привести ?
6 0Mint
 
17.09.12
15:29
(5) Ты не поверишь, но у меня не 0, а дату возвращает.
7 ПульсЪ
 
17.09.12
15:34
8 0Mint
 
17.09.12
15:36
(7)
шелл = Новый COMОбъект("WScript.Shell");
Значение = шелл.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate");
Сообщить(Значение);
Дата1 = Дата("19700101000000") + Значение;    
Сообщить(Дата1);


13.12.2011 18:15:17
9 ПульсЪ
 
17.09.12
15:37
Дата1    01.01.1970 0:00:00

вот у меня вот так :)
10 Maxus43
 
17.09.12
15:38
у меня тоже 0; зависит от винды видимо или ещё чего
11 ПульсЪ
 
17.09.12
15:38
а какая ось стоит и версия 1с ?
12 ПульсЪ
 
17.09.12
15:39
и какой тип значения InstallDate в самом реестре ? у меня  Reg_Dword
13 0Mint
 
17.09.12
15:43
Xp SP3, Reg_DWORD, Hexadecimal, 8.2.15.319, проверял на файловой.
14 Maxus43
 
17.09.12
15:44
у мну 7-ка
15 0Mint
 
17.09.12
15:45
32 bit.
16 ПульсЪ
 
17.09.12
15:45
на виртуалке запустил XP, проверил код, действительно:

на XP все нормально получает
на Win7 возвращает 0

:(
17 ПульсЪ
 
17.09.12
15:49
есть еще какие нибудь варианты получения значения из реестра в 1с

пробывал так
   
Перем Значение; // В эту переменную запишем значение из реестра
   
RegProv=ПолучитьCOMОбъект(
"winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"
);

// Читаем значение ключа StartDate из ветки
// HKEY_CURRENT_USER\Software\1C\1Cv8\Report в переменную Значение
RegProv.GetStringValue("2147483649","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion","InstallDate",Значение);

в значение ничего не записывается
18 Maxus43
 
17.09.12
15:49
дак на 7-ке путь то другой, не?
19 ПульсЪ
 
17.09.12
15:50
(18) тот же самый путь
20 ПульсЪ
 
17.09.12
15:50
(18) +тип ключа точно такой же
21 0Mint
 
17.09.12
15:52
http://www.autoitscript.com/forum/topic/128213-regread-pb-with-windows-7-64-bits/
I find the solution (but it's not very cool)
It's work if you add Wow6432Node word in your key to read
$return=RegRead("HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{BEWINTERNET-FR-DME}.UninstallSuite","UninstallString")
Вроде эта же проблема, попробуй так же.
22 ПульсЪ
 
17.09.12
15:56
шелл = Новый COMОбъект("WScript.Shell");
Значение = шелл.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\{BEWINTERNET-FR-DME}.InstallDate","UninstallString");



описание ошибки возвращает - неверное число параметров
23 ПульсЪ
 
17.09.12
15:56
а криво сделал, ща еще попробую
24 ПульсЪ
 
17.09.12
15:59
даже если

Значение = шелл.RegRead("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{BEWINTERNET-FR-DME}.UninstallSuite","UninstallString")

все равно таже ошибка
25 0Mint
 
17.09.12
16:00
Значение = шелл.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\InstallDate");
26 0Mint
 
17.09.12
16:02
http://support.microsoft.com/kb/256986/ru
Реестр 64-разрядных версий Windows XP и Windows Server 2003 и Windows Vista подразделяется на 32- и 64-разрядные разделы. Большинство 32-разрядных разделов имеют те же имена, что и их аналоги в 64-разрядном разделе, и наоборот. По умолчанию редактор реестра 64-разрядных версий Windows XP и Windows Server 2003 и Windows Vista отображает 32-разрядные разделы в следующем узле:
HKEY_LOCAL_MACHINE\Software\WOW6432Node
27 ПульсЪ
 
17.09.12
16:12
в реестре глянул, нету там даты установки вин, есть значения установки ie, некоторых прог, но про винду нету, в том время как если поглядеть в самом реестре, то в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate

есть сама дата

в 16ичной 504f901b
в 10 1347391515

что собственно и = 11.09.2012 19:25:15

все так и есть
28 ПульсЪ
 
17.09.12
22:16
ап апчик

есть еще какие нибудь варианты получения значения из реестра в 1с
29 0Mint
 
18.09.12
11:15
(25) пробовал?
30 ПульсЪ
 
18.09.12
12:16
(29) да
31 ПульсЪ
 
18.09.12
12:16
(29) не работает
32 ПульсЪ
 
18.09.12
12:20
(29) возвращает так же 0
33 0Mint
 
18.09.12
12:49
(32)
Когда пробуешь, смотри чтобы экземпляр RegEdit не был запущен.
http://support.microsoft.com/kb/305097
У тебя win7 64?
34 ПульсЪ
 
18.09.12
12:51
(33)  рег эдит запущен 1

да win7 x64
35 ПульсЪ
 
18.09.12
12:56
Перем Значение;
   
RegProv=ПолучитьCOMОбъект(
"winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"
);

RegProv.GetStringValue("2147483649","HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion","InstallDate",Значение);

а вот так если то записывается NULL
36 0Mint
 
18.09.12
12:57
(34)
Когда обработку запускаешь закрывай его.
x64 — почитай http://support.microsoft.com/kb/305097
37 0Mint
 
18.09.12
13:00
Значение = шелл.RegRead("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate");
38 ПульсЪ
 
18.09.12
13:08
(37) описание ошибки возвращает "Неверная ссылка на корень в разделе реестра HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
39 ПульсЪ
 
18.09.12
13:12
думается мне нужно не в этом направлении искать, т.к. в то же время

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName и другие отрабатывают нормально
40 ПульсЪ
 
18.09.12
13:16
а вот и прикол

написал скрипт vbs

Dim WshShell

Set WshShell = CreateObject("WScript.Shell")

sReg = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate")

MsgBox sReg

возвращает ок
41 zladenuw
 
18.09.12
13:17
а что мешает через systeminfo  и записывать значение в файл
http://www.diwaxx.ru/win/command-prompt.php
42 zladenuw
 
18.09.12
13:18
ну или даже так http://itband.ru/2009/11/remote-execution/
43 ПульсЪ
 
18.09.12
13:19
(41) записывать в файл, потом цеплять из файла, да и не хочется что то подобное применять, нужно что бы в 1с отрабатывало, без всяких файлов
44 zladenuw
 
18.09.12
13:23
Еще, как вариант, определить, когда была установлена ОС — это воспользоваться командой wmic. Для этого необходимо ввести в командной строке команду wmic os get installdate.


После ввода команды на экране отобразится дата установки операционной системы. Чтобы привести ее в более понятный вид можно с помощью команды PowerShell.

PS C:\; ([WMI]'').ConvertToDateTime((Get-WmiObject Win32_OperatingSystem).InstallDate)

Так же узнать дату установки Windows можно с помощью реестра. Для этого в реестре нужно найти ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion и далее найти параметр REG_DWORD с именем InstallDate.



Так как данные хранятся в Hex коде его также нужно преобразовать при помощи команды PowerShell.

PS C:\> [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds ($(get-itemproperty 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion').InstallDate))
45 zladenuw
 
18.09.12
13:24
46 zladenuw
 
18.09.12
13:26
оно ?
47 ПульсЪ
 
18.09.12
13:27
(46) изучаю, думаю как это дело в 1с затолкать
48 zladenuw
 
18.09.12
13:33
49 zladenuw
 
18.09.12
13:34
покажешь решение. :)
50 ПульсЪ
 
18.09.12
13:39
(48) как я понял, можно формировать из 1с скрипт и юзать его. Так не вариант, надо что бы без файла )

(49) как разберусь, покажу конечно )
51 zladenuw
 
18.09.12
14:11
так там можно и без файла. получай через объект значение и конвертируй его.
([WMI]'').ConvertToDateTime((Get-WmiObject Win32_OperatingSystem).InstallDate)
что то такое. думаю разберешься до конца сам.
52 zladenuw
 
18.09.12
14:41
(50)
и все довольно просто

   strComputer = ".";

   objWMIService = ПолучитьCOMОбъект("winmgmts:\\" + strComputer + "\root\cimv2");

  objOS =objWMIService.ExecQuery("Select * from Win32_OperatingSystem");
 
  Для каждого strOS Из objOS Цикл
       dtmInstallDate = strOS.InstallDate;
         Сообщить(dtmInstallDate);
       Дата =  Сред(dtmInstallDate, 5, 2) + "/" + Сред(dtmInstallDate, 7, 2) + "/"+ Лев(dtmInstallDate, 4) + " " + Сред (dtmInstallDate, 9, 2) + ":"+ Сред(dtmInstallDate, 11, 2) + ":" + Сред(dtmInstallDate, 13, 2);
       Сообщить(Дата);
  КонецЦикла;
53 ПульсЪ
 
18.09.12
14:49
(52) и вправду)) спасибище )) все ок работает, а я тут кручу верчу.. )

спасиб всем кто помогал


п.с.

кстате, еще прикол

   // ИмяСкрипта = ПолучитьИмяВременногоФайла(".vbs");
   //Скрипт = Новый ЗаписьТекста(ИмяСкрипта, КодировкаТекста.ANSI);
   //Скрипт.ЗаписатьСтроку("Dim WshShell");

   //Скрипт.ЗаписатьСтроку("Set WshShell = CreateObject(""WScript.Shell"")");
   //Скрипт.ЗаписатьСтроку("sReg = WshShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate"")");
   //Скрипт.ЗаписатьСтроку("MsgBox sReg");
   //Скрипт.Закрыть();
   //ЗапуститьПриложение(ИмяСкрипта);

выдает 0 !!!!!!!!!!!!!!

в то же время если его запустить из темпов ручками всё ок..
чудеса
54 ПульсЪ
 
18.09.12
14:56
вот так будет правильней )

   strComputer = ".";

  objWMIService = ПолучитьCOMОбъект("winmgmts:\\" + strComputer + "\root\cimv2");

  objOS =objWMIService.ExecQuery("Select * from Win32_OperatingSystem");
 
  Для каждого strOS Из objOS Цикл
       dtmInstallDate = strOS.InstallDate;
      // Сообщить(dtmInstallDate);
      // Дата =  Сред(dtmInstallDate, 5, 2) + "/" + Сред(dtmInstallDate, 7, 2) + "/"+ Лев(dtmInstallDate, 4) + " " + Сред (dtmInstallDate, 9, 2) + ":"+ Сред(dtmInstallDate, 11, 2) + ":" + Сред(dtmInstallDate, 13, 2);
       ДатаИнсталОС = Дата(Лев(dtmInstallDate,Найти(dtmInstallDate,".")-1));
       //Сообщить(Дата);
  КонецЦикла;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn