2016-01-05 3 views
-1

Я пытаюсь создать раздел реестра и подразделение для включения режима Enterprise 11 для всех пользователей на машине. Это то, что я использую для своего VBScript в настоящее время, и он терпит неудачу (не добавляет ключ). Я мог бы использовать некоторую помощь, чтобы исправить это.Создать ключ реестра (и подразделы)?

Const HKEY_LOCAL_MACHINE = &H80000002 

    strComputer = "." 

    Set ObjRegistry = _ 
     GetObject("winmgmts:{impersonationLevel = impersonate}! \\" & _ 
     strComputer & "\root\default:StdRegProv") 

    strPath = strKeyPath & "\" & strSubPath 
    strKeyPath = "Software\Policies\Microsoft" 
    strSubPath = "Internet Explorer\Main\EnterpriseMode" 
    strName = "Enabled" 

    ObjRegistry.CreateKey (HKEY_LOCAL_MACHINE, strPath) 
    ObjRegistry.SetStringValue HKEY_LOCAL_MACHINE, strPath, strName, strValue 
    MsgBox "Successfully enabled Internet Explorer Enterprise Mode." 
End Function 
+3

Попробуйте вставлять эту строку 'strPath = strKeyPath & "\" & strSubPath' после установки' 'strKeyPath' и strSubPath'. В настоящее время у вас это есть, поэтому 'strPath', вероятно, NULL, когда он используется в вашем вызове' ObjRegistry.CreateKey'. – JNevill

+0

Нет, это не решило мою проблему, я получил еще одну ошибку. «Невозможно использовать круглые скобки при вызове Sub» – blaq

+0

Какая ошибка вы получаете? Где вы получаете сообщение об ошибке раньше? – JNevill

ответ

1

У вас есть несколько проблем с кодом, кроме того, что вы отправили образец неполного кода.

  • "winmgmts:{impersonationLevel = impersonate}! \\" & strComputer & "\root\default:StdRegProv"
    WMI moniker содержит паразитное пространство между параметрами безопасности и путем (...! \\...). Убери это.
    В качестве примечания стороны бессмысленно использовать переменную для имени хоста, если это имя хоста никогда не изменяется.
  • strPath = strKeyPath & "\" & strSubPath
    Вы определяете strPath, прежде чем определять переменные, из которых вы строите путь. Кроме того, ваши компоненты пути определяются как строковые литералы, поэтому вы можете удалить конкатенацию и дополнительные переменные и просто определить strPath как строковый литерал.
  • ObjRegistry.CreateKey (HKEY_LOCAL_MACHINE, strPath)
    Вы не должны помещать списки аргументов в круглые скобки, если вы не вызываете функцию/метод/процедуру в контексте подвыражения. См. here для получения более подробной информации. Тем не менее, вы можете проверить возвращаемое значение вызовов метода, чтобы узнать, были ли они успешными.

И FTR, hungarian notation - бессмысленный код раздувания. Не используйте его.

Модифицированный код:

Function SetEnterpriseMode(value) 
    Const HKLM = &h80000002 

    Set reg = GetObject("winmgmts:{impersonationLevel=impersonate}!//./root/default:StdRegProv") 

    path = "Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode" 
    name = "Enabled" 

    rc = reg.CreateKey(HKLM, path) 
    If rc <> 0 Then 
     MsgBox "Cannot create key (" & rc & ")." 
     Exit Function 
    End If 

    rc = reg.SetStringValue(HKLM, path, name, value) 
    If rc = 0 Then 
     MsgBox "Successfully enabled Internet Explorer Enterprise Mode." 
    Else 
     MsgBox "Cannot set value (" & rc & ")." 
    End If 
End Function 
+0

Благодарим за предоставленную мне эту информацию. – blaq

Смежные вопросы