5

職場の 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 のキーによって上書きされますか? それとも、私はこれを完全に間違った方法で行っていますか?

4

1 に答える 1