2015-08-04 5 views

ответ

1

Существует несколько возможностей для этого. Прежде всего, если у вас есть SCCM 2012, вы можете использовать приложение вместо пакета/программы. Приложения должны выполняться в 64 бит на соответствующих машинах.

Если вам нужен пакет, и вы когда-либо захотите его выполнить на машинах 64Bit (либо потому, что у вас есть только те, либо из-за того, что вы делаете несколько пакетов со специальными настройками среды, ограничивая их только 64Bit), вы можете использовать sysnative. Sysnative - это жесткая ссылка в C: \ windows, которую вы можете использовать для принудительного доступа к собственной папке system32, а не к эмулируемому WoW64. Итак, вы должны использовать C:\Windows\sysnative\wscript.exe <path to your script> как путь к исполняемым программам, скрипт будет выполнен с 64-битным хостом скриптов, и поэтому доступ к реестру будет работать. К сожалению, MS упустила возможность включить системный на 32-битных машинах, так что в этих системах это не сработает.

Третья возможность также основана на системной работе, но работает и на 32-битных системах. Если включить следующий код в начале вашего скрипта:

If fso.FileExists("C:\Windows\SysWOW64\wscript.exe") Then ' very basic check for 64bit Windows, you can replace it with a more complicated wmi check if you find it not reliable enough 
    If InStr(1, WScript.FullName, "SysWOW64", vbTextCompare) <> 0 Then ' = case insensitive check 
     newFullName = Replace(WScript.FullName, "SysWOW64", "Sysnative", 1, -1, vbTextCompare) ' System32 is replaced by Sysnative to deactivate WoW64, cscript or wscript stay the same 
     newArguments = "" ' in case of command line arguments they are passed on 
     For Each arg In WScript.Arguments 
      newArguments = newArguments & arg & " " 
     Next 
     wso.Run newFullName & " """ & WScript.ScriptFullName & """ " & newArguments, , False 
     WScript.Quit '32 Bit Scripting Host is closed 
    End If 
End If 

он будет проверять, если это машина 64Bit и если да рестарт себя с родной сценариев хозяина, сохраняя при этом все параметры. Если он не обнаружит 64Bit, он будет нормально работать в 32Bit.

0

strValue64 = ReadRegStr (HKEY_LOCAL_MACHINE, strKeyPath64, "UninstallString", 64) strValue32 = ReadRegStr (HKEY_LOCAL_MACHINE, strKeyPath32, "UninstallString", 64) Функция ReadRegStr (корневого раздела, Key, Value, RegType) дим oCtx, oLocator , Öreg, oInParams, oOutParams

Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet") 
oCtx.Add "__ProviderArchitecture", RegType 

Set oLocator = CreateObject("Wbemscripting.SWbemLocator") 
Set oReg = oLocator.ConnectServer("", "root\default", "", "", , , , oCtx).Get("StdRegProv") 

Set oInParams = oReg.Methods_("GetStringValue").InParameters 
oInParams.hDefKey = RootKey 
oInParams.sSubKeyName = Key 
oInParams.sValueName = Value 

Set oOutParams = oReg.ExecMethod_("GetStringValue", oInParams, , oCtx) 

ReadRegStr = oOutParams.sValue 

End Function