職場の IT 部門から割り当てられたタスクに取り組み始めたところです。それは、Microsoft Office 2013 のインストールに使用されるプロダクト キーを読み取り、それをコンピューター名に割り当てるプログラムを作成することです。復旧が必要な場合に備えてデータベースを使用します (これは 150 を超えるシステムを持つ会社であることを覚えておいてください)。
プロダクト キーを取得するためのいくつかの推奨プログラムをネットで調べた後、AutoIT と VB.net の両方を使用して自分でプログラムを作成する方法を調べました。
このプログラムをテストしているシステムには、Microsoft Business Retail エディションがインストールされており、実行するとC:\Program Files(x86)\Microsoft Office\Office15\ cscript ospp.vbs
、Microsoft Project (BWTM4) 用と Office 2013 (7PYM4) 用の 2 つの 5 文字のキーが提供されました。作成したアプリケーションを実行すると、BWMT4 キーを使用してキーを取得し、ネット上のアプリケーション (Belarc、SterJo など) が同じキーを返します。ただし、これは Project のキーであり、Microsoft Office 2013 のインストールでは、次のメッセージでこれを確認します: このキーは Microsoft Project 2013 用です。
私のAutoITコード:
Case "Office 2013 x86"
$RegKey = 'HKLM\SOFTWARE\Microsoft\Office\15.0\Registration'
If @OSArch = 'x64' Then $RegKey = 'HKLM64\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Registration'
For $i = 1 To 1024
$var = RegEnumKey($RegKey, $i)
If @error <> 0 Then ExitLoop
$bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId')
If Not @error Then ExitLoop
Next
$iKeyOffset = 0x328
Case "Office 2013 x64"
If @OSArch <> 'x64' Then SetError(1, 0, "Product not found")
$RegKey = 'HKLM64\SOFTWARE\Microsoft\Office\15.0\Registration'
For $i = 1 To 1024
$var = RegEnumKey($RegKey, $i)
If @error <> 0 Then ExitLoop
$bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId')
If Not @error Then ExitLoop
Next
$iKeyOffset = 0x328
私のVB.netコード: このコードはネットからのものに基づいており、これを作成することを主張していません
Dim digitalProductId As IList(Of Byte) = Nothing
If True Then
Dim registry As RegistryKey = Nothing
registry = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Registration\{90150000-012D-0000-0000-0000000FF1CE}", False)
If registry IsNot Nothing Then
digitalProductId = TryCast(registry.GetValue("DigitalProductId"), Byte())
registry.Close()
Else
Return Nothing
End If
End If
Dim keyStartIndex As Integer = 52
Dim keyEndIndex As Integer = keyStartIndex + 15
Office 2013 キーの開始インデックスが異なるのでしょうか、それとも Lync 2013 のキー/Project 2013 のキーによって上書きされますか? それとも、私はこれを完全に間違った方法で行っていますか?