|
Значение из реестра | ☑ | ||
---|---|---|---|---|
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
|
(6) обманывать смысла нету
http://i40.fastpic.ru/big/2012/0917/49/e55db521c3b5bd2deadd5f2bfbc91549.png |
|||
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
|
||||
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)); //Сообщить(Дата); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |