WMI class 属性 return 与 C# 和 VBS 的不同值...哪个是正确的?

WMI class properities return different values with C# and VBS...which one is correct?

我在 C# 中有一个 class,它从 WMI class "root\Microsoft\SqlServer\ComputerManagement11:SqlServiceAdvancedProperty" 中获取名称为 SKU 的属性 作为

PropertyName : SKU PropertyNumValue : 2702571241

但是当我通过 VB 脚本获取相同的 属性 时,结果如下。

PropertyName: SKU PropertyNumValue: -1592396055

哪个值是正确的?

发生了什么转化?

值是相同的,一个四字节 (DWORD) 值,在十六进制中显示为 A115F6E9

您的 C# 代码将其视为无符号整数,而您的 VBScript 将其视为 有符号 整数。您可以在各自的语言中使用这两个值。

如果你想将结果与常量进行比较,你应该在两种语言中使用十六进制表示法定义常量,例如 C# 中的 0xA115F6E9 和 VBScript 中的 &HA115F6E9

事实上,Eric Lippert 不久前写过 an article 这篇文章,解释了如何在 VBScript 中将负数转换为十六进制值。