2

Goを介してWindowsレジストリに書き込む必要がありますが、そのためのメカニズムが見つかりません。

https://github.com/lxn/go-winapiは、 advapi32.goファイルのレジストリへの読み取り専用アクセスを提供することがわかりました。レジストリに書き込む機能も要求するバグレポートを提出したので、将来的に誰かのウィッシュリストまたはタスクリストになります。

この能力は既存のGoライブラリにも存在しない可能性があり、作成する必要があると思います。それがすでに存在する可能性があるので、私はここで尋ねています。存在しないが、go-winapiまたは他の同様のライブラリを拡張することに興味がある場合は、実行してください。または、レジストリへの書き込みの背後にあるメカニズムを知っている場合は、その情報を共有して、私(または他の誰か)がそれをgo-winapiライブラリのパッチに組み込むことができるようにしてください。

他に何もなければ、これをgo-winapiまたは同様のライブラリに自分で追加できる場合は、ここに戻ってこれに答えます(他に誰も答えない場合) 。

4

3 に答える 3

3

ここにいくつかのサンプルがあります

https://github.com/axgle/go/tree/master/regedit

于 2012-05-15T10:16:03.053 に答える
3

bitbucket.org/kardianos/service/src/service_windows.goにあり、(ボーナス!)Windowsサービス管理コードとともに動作するWindowsレジストリコードもあります。そのコードのサンプルを次に示します。

var regSetKeyValueExProc = advapi.MustFindProc("RegSetValueExW")
func regSetKeyValue(h syscall.Handle, keyName string, data interface{}) error {
        var dataPtr, dataLen, dataType uintptr
        switch v := data.(type) {
        case uint32:
                dataPtr, dataLen = uintptr(unsafe.Pointer(&v)), 4
                dataType = _REG_DWORD
        case string:
                // The comment on MSDN regarding escaping back-slashes, are c-lang specific.
                // The API just takes a normal NUL terminated string, no special escaping required.
                dataPtr, dataLen = StringToUTF16PtrLen(v)
                dataType = _REG_SZ
        }
        r0, _, e1 := regSetKeyValueExProc.Call(
                uintptr(h),
                uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(keyName))),
                0,
                dataType,
                dataPtr,
                dataLen,
        )
        if r0 != 0 {
                return e1
        }
        return nil
}
于 2012-05-31T11:52:20.127 に答える
0

もう1つのオプションは、WMIを使用してレジストリの読み取り/書き込みを行うことです。レジストリにはGoからもアクセスできます。

WMIC:レジストリの操作では、WindowsのWMICコマンドラインツールを使用してこれを実行する方法について説明します。これは、WMIとインターフェイスできる任意のプログラミング環境での使用に適合させることができます。

user1391070の回答をフラグ付きの回答として残しますが、これはWMIルートを使用する必要がある人に役立つ可能性があります。

于 2012-05-23T08:52:21.980 に答える