gpt4 book ai didi

windows - 在Go中调用Windows API时如何获取Windows系统错误代码

转载 作者:行者123 更新时间:2023-12-01 22:11:20 25 4
gpt4 key购买 nike

我在Go中使用Windows服务管理器软件包golang.org \ x .. \ windows \ svc \ mgr。调用此程序包的OpenService时,我收到的是错误消息The specified service does not exist as an installed service.,而不是Windows系统错误代码,在本例中为https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--1000-1299-,它是1060这是代码

package service

import (
"fmt"
"os"
"os/signal"
"strconv"
"strings"
"sync"
"time"
"unsafe"

"golang.org/x/sys/windows/registry"
"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/eventlog"
"golang.org/x/sys/windows/svc/mgr"
)

func (ws *windowsService) Status() (Status, error) {
m, err := mgr.Connect()
if err != nil {
return StatusUnknown, err
}
defer m.Disconnect()

s, err := m.OpenService(ws.Name)
if err != nil {
if err.Error() == "The specified service does not exist as an installed service." {
return StatusUnknown, ErrNotInstalled
}
return StatusUnknown, err
}

// Rest of the code.
}

err.Error()仅返回错误消息,因此,如果Windows以英语返回错误消息,则上面的代码将起作用。但是,如果操作系统中不存在英语资源,则会失败,因为错误消息将以其他语言返回。
在命令提示符下执行 sc query servicename时,它将返回错误代码以及消息。 Example
那么,如何在Go中获得Windows系统错误代码以及错误消息呢?

最佳答案

您可以对syscall.Errno进行类型声明。然后,您可以将其当作int值来处理。
例:

if syserr, ok := err.(syscall.Errno); ok {
if syserr == 1060 {
//Do whatever
}
}

关于windows - 在Go中调用Windows API时如何获取Windows系统错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63470776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com