1 (изменено: malegik, 2011-07-26 14:18:15)

Тема: VBA: изменение ключа продукта Windows XP

Добрый день.
Есть задача поменять ключ продукта XP на лицензионный. для этого патаюсь переделать скрипт от майкрософта

ON ERROR RESUME NEXT

if Wscript.arguments.count<1 then
   Wscript.echo "Нельзя запустить сценарий без аргумента VolumeProductKey argument"
   Wscript.echo "Правильное использование: Cscript ChangeVLKey.vbs xxxx-xxxxx-xxxxx-xxxxx-xxxxx"
   Wscript.quit
end if

Dim VOL_PROD_KEY
VOL_PROD_KEY = Wscript.arguments.Item(0)
VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") 'удалить дефисы, если они есть
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegDelete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WPAEvents\OOBETimer" 'delete OOBETimer registry value
for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")

   result = Obj.SetProductKey (VOL_PROD_KEY)

   if err <> 0 then
      WScript.Echo Err.Description, "0x" & Hex(Err.Number)
      Err.Clear
   end if

Next

Проблемма в том что если я явно указываю, а не через аргумент  VOL_PROD_KEY, то он выдает общую ошибку 
на строку result = Obj.SetProductKey (VOL_PROD_KEY)

Dim VOL_PROD_KEY
VOL_PROD_KEY = "3KGJ7-JPVFH-2KDK2-BH6CC-RHM8T" 
VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") 'удалить дефисы, если они есть
WScript.Echo VOL_PROD_KEY
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegDelete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WPAEvents\OOBETimer" 'delete OOBETimer registry value
for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")

   result = Obj.SetProductKey (VOL_PROD_KEY)

   if err <> 0 then
      WScript.Echo Err.Description, "0x" & Hex(Err.Number)
      Err.Clear
   end if

Next

подскажите, в чем моя ошибка.

2

Re: VBA: изменение ключа продукта Windows XP

Судя по SetProductKey Method of the Win32_WindowsProductActivation Class (Windows):

ProductKey [in]

Unique product key that is licensed for use on the computer. Product keys are alphanumeric strings of 25 characters formatted as follows: xxxxx-xxxxx-xxxxx-xxxxx-xxxxx. The product key must be valid for the media type. Media types include retail, volume-licensing, and OEM.

это:

VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") 'удалить дефисы, если они есть

лишнее.

3

Re: VBA: изменение ключа продукта Windows XP

Посмотрел на статьи:
Изменение ключа продукта, установленного по корпоративной лицензии, на компьютере под управлением Windows XP с пакетом обновления 1 (SP1)
Изменение ключа продукта для корпоративного лицензирования на компьютере с Windows XP или Windows Server 2003
— там именно Ваш вариант с заменой. Возможно, тогда читать это:

Remarks: This method is only validif the ActivationRequired property is equal to 1.

4

Re: VBA: изменение ключа продукта Windows XP

Скрипт замечательно работает пока я не пытаюсь ввести ключ в скрипте, а не через аргумент. дело в том что это будет вторая часть скрипта который с начала будет проверять какой ключ установленый и потом,  если он совподает с ключем на замену должен как раз и отрабатывать эту часть скрипта. 
может тип не совпадает?

5

Re: VBA: изменение ключа продукта Windows XP

В порядке бреда: заглавные/строчные буквы в ключе?

6

Re: VBA: изменение ключа продукта Windows XP

alexii пишет:

В порядке бреда: заглавные/строчные буквы в ключе?

неа, тот же результат.

7

Re: VBA: изменение ключа продукта Windows XP

разобрался. ему не нравился конкретный ключ. сейчас все работает.
Спасибо за помощь.