有没有办法检测主机操作系统是XP、Vista、7、8还是10?runtime.GOOS
只返回“Windows”。
原因是因为我试图操作启动文件夹中的文件。
在windows vista、7、8、10上,它位于:%appdata%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
在Windows XP上,它位于:Documents and Settings\%username%\Start Menu\Programs\Startup
4条答案
按热度按时间ffvjumwh1#
为什么不使用windows注册表?
https://godoc.org/golang.org/x/sys/windows/registry
How to return a default value from windows/registry with golang
这将返回:
虽然在最新版本的windows中,你必须阅读以下键才能获得版本:当前主版本号和当前次版本号
roejwanj2#
如果您想获得Windows版本,请使用w32 library,这是一个纯粹的Go Win32 API Package 器。
它有w32.RtlGetVersion()返回一个包含(除其他内容外)MajorVersion和MinorVersion的结构体。这些将报告程序运行的正确Windows版本。
你不能依赖函数w32.GetVersion()。理论上你可以使用this Windows version table来知道你在哪里,但是GetVersion只适用于有正确清单文件的应用程序,清单文件表明该程序适用于Windows 10。如果你只是用
go build
编译而没有清单文件,GetVersion仍然会报告Windows 8(Windows版本6.2)。但是请注意,正如其他人正确指出的那样,您实际上应该使用适当的Win32 API函数来获取您的特殊文件夹。
9avjhtql3#
我知道这已经很老了,但是在写这篇文章的时候(2023年1月),你可以使用RtlGetNtVersionNumbers,它是由Go语言正式维护的。
对我来说就是
10 0 22621
。ngynwnxp4#
基于Jörg W Mittag的精彩评论,这应该让你开始:
有关详细信息,请参见https://cs.opensource.google/go/x/sys/+/master:windows上的
syscall_windows.go
和zknownfolderids_windows.go
。注意the last version of Go to support WinXP was 1.10,当前版本是1.19,并且为最后两个版本提供了支持,因此截至目前(2023年1月10日),最后一个受支持的版本是1.18。
我的意思是,让它在WinXP上工作的必要性是没有实际意义的:使用Go1.14+为Windows构建的程序甚至无法在该平台上启动。