none
vbs создание записи в реестре если ее не существует RRS feed

  • Общие обсуждения

  • Доброго времени!

    Задача: создать ключ в реестре (путь к базе 1с) ветка HKCU, расположение "Software\1C\1v7\7.7\Titles\", имя "расположение_базы_на диске" (и кто это придумал?), значение "название_базы"

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

    Сильно не пинайте, но направьте в нужную сторону.

    вот что имею на данный момент:

    Const HKEY_CURRENT_USER = &H80000001
    Dim objRegistry
    Dim mainkey,sPath,pPathstring,adString On Error Resume Next Set objRegistry = GetObject("winmgmts:root\default:StdRegProv") sPath = "SOFTWARE\1C\1Cv7\7.7\Titles\" pPathString = "c:\bases\profil" adString = "profil_base" mainkey = objRegistry.CreateKey(HKEY_CURRENT_USER, sPath) If (mainkey=0) And (Err.Number=0) Then Wscript.Echo "HKEY_CURERNT_USER\Software\1C\1Cv7\7.7\Titles\ created" End If mainkey = objRegistry.SetStringValue(HKEY_CURRENT_USER,sPath,pPathString,adString) If (mainkey = 0) And (Err.Number = 0) Then WScript.Echo "Write successful!" Else WScript.Echo "An error occurred. The return code is " & mainkey & "." End If
    спасибо, заранее.
    4 марта 2011 г. 10:07

Все ответы

  • http://www.visualbasicscript.com/Function-to-check-if-registry-key-exists-m35278.aspx

    http://technet.microsoft.com/en-us/library/ee176989.aspx

    http://www.tek-tips.com/faqs.cfm?fid=5864

     

    Function RegistryKeyExists(LNGHKEY, strKey, strSubkey)
       Const HKLM = &H80000002
       Const HKCR = &H80000000
       Const HKCU = &H80000001
       Const HKUSERS = &H80000003
       RegistryKeyExists = False
       Dim reg, aSubkeys, s, hkroot
       If LNGHKEY = "HKLM" Then hkRoot = HKLM
       If LNGHKEY = "HKCU" Then hkRoot = HKCU
       If LNGHKEY = "HKCR" Then hkRoot = HKCR
       If LNGHKEY = "HKUSERS" Then hkRoot = HKUSERS
       Set reg = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
       reg.EnumKey hkroot, strKey, aSubkeys
       If Not IsNull(aSubkeys) Then
         For Each s In aSubkeys
           If lcase(s)=lcase(strSubkey) Then
             RegistryKeyExists = True
             Exit Function
           End If
         Next
       End If
    End Function 
    
    Const HKEY_CURRENT_USER = &H80000001
    Dim objRegistry
    
    Dim mainkey,sPath,pPathstring,adString
    
    On Error Resume Next
    
    Set objRegistry = GetObject("winmgmts:root\default:StdRegProv")
    sPath = "SOFTWARE\1C\1Cv7\7.7\Titles\"
    pPathString = "c:\bases\profil"
    adString = "profil_base"
    If RegistryKeyExists("HKCU","SOFTWARE\1C\1Cv7\7.7","Titles") = False Then 
    	mainkey = objRegistry.CreateKey(HKEY_CURRENT_USER, sPath)
    	If (mainkey=0) And (Err.Number=0) Then
    	 Wscript.Echo "HKEY_CURERNT_USER\Software\1C\1Cv7\7.7\Titles\ created"
    	End If
    	mainkey = objRegistry.SetStringValue(HKEY_CURRENT_USER,sPath,pPathString,adString)
    	If (mainkey = 0) And (Err.Number = 0) Then
    	 WScript.Echo "Write successful!"
    	Else
    	 WScript.Echo "An error occurred. The return code is " & mainkey & "."
    	End If
    Else 
       WScript.Echo "RegKey exists" 
    End If 

    4 марта 2011 г. 10:51
    Отвечающий
  • Да, уж. В некоторых случаях быстрее и удобнее использовать старый добрый cmd-файл. Всего две строчки и все дела:

    chcp 1251


    reg Query "HKCU\Software\1C\1v7\7.7\Titles" /v "расположение_базы_на диске" || reg Add "HKCU\Software\1C\1v7\7.7\Titles" /v "расположение_базы_на диске" /t "REG_SZ" /d "Путь к 1С" /f

    4 марта 2011 г. 17:18
  • Проверки нет, - просто создается/перезаписывается запись в реестре. Командшелл в данном случае, конечно рулит, но хотелось бы добить этот скрипт. Я новичок в vbs, поэтому прошу вашего участия. Пробовал также использовать конструкцию:
    ...
    StrValueName="C:\Bases\profil"
    strKeyPath = "Software\1C\1v7\7.7\Titles"
    Set objReg=GetObject("winmgmts:root\default:StdRegProv")
    strValueName = "UIHost"
    Return = objReg.GetExpandedStringValue(HKEY_CURRENT_USER,_
      strKeyPath,strValueName,strValue)
    If strValue = "base_profil" Then
      Wscript.Echo strValue
    ...
    
    
    , но безерезультатно(
    5 марта 2011 г. 9:27
  • Вы определитесь,где у вас значение.

    StrValueName="C:\Bases\profil" или в strValueName ="UIHost".

    strKeyPath = "SOFTWARE\1C\1Cv7\7.7\Titles\"

    strValueName = "c:\bases\profil"

    adString = "profil_base"

     

    objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,sValue
    	If sValue = adString Then
    	 Wscript.Echo "The registry key exist."
    		Else
    	 mainkey = objRegistry.SetStringValue(HKEY_CURRENT_USER,sPath,pPathString,adString)
    		If (mainkey = 0) And (Err.Number = 0) Then
    			 WScript.Echo "Write successful!"
    			Else
    			 WScript.Echo "An error occurred. The return code is " & mainkey & "."
    		End If
    	End If
    

     

    5 марта 2011 г. 10:22
    Отвечающий
  • Прошу извинить меня за то, что ввел вас в заблуждение. Действительно strValueName="UIHost" взято из примера msdn, но не из скрипта, т.к. этого фрагмента кода в нем уже нет.
    5 марта 2011 г. 11:37
  • Спасибо за помощь.
    9 марта 2011 г. 6:51