【问题标题】:Getting Unique System ID on Mac using C#(Mono)使用 C#(Mono) 在 Mac 上获取唯一系统 ID
【发布时间】:2015-07-30 03:59:43
【问题描述】:

我正在使用 Mono 为 Mac 移植一个 Windows 应用程序。我不能在 Mac 中使用 DPAPI,我认为在 Mac 中为用户级程序获取主板/CPU id 是有限制的。那么我可以使用 Windows 中的 DPAPI 之类的东西吗使用 Mono 获取不变的唯一系统 ID。

【问题讨论】:

    标签: c# .net macos mono hardware-id


    【解决方案1】:

    首先,不要使用 MAC 地址,因为这些地址可能会发生变化(欺骗或硬件更改),并且自 10.3/4 以来就不是一种非常 Mac'ie 的方式?...从那时起,“I/O Kit 注册表”就是获取系统 ID 的首选方法。转到 cmd 行和 man ioreg 以获取相同的详细信息。

    所以,不确定您是否使用 Xamarin.Mac,所以如果您,您可以绑定 IOKit IORegistryEntryFromPath/IORegistryEntryCreateCFProperty API,因为我不相信这些 API 目前在 C# 中包装器,但我使用的真正快速的方法是:

    using System;
    using System.Diagnostics;
    using System.Text;
    
    namespace uuidmac
    {
        class MainClass
        {
            static string MacUUID ()
            {
                var startInfo = new ProcessStartInfo () {
                    FileName = "sh",
                    Arguments = "-c \"ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/'\"",
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    RedirectStandardInput = true,
                    UserName = Environment.UserName
                };
                var builder = new StringBuilder ();
                using (Process process = Process.Start (startInfo)) {
                    process.WaitForExit ();
                    builder.Append (process.StandardOutput.ReadToEnd ());
                }
                return builder.ToString ();
            }
    
            public static int Main (string[] args)
            {
                Console.WriteLine (MacUUID ());
                return 0;
            }
        }
    }
    

    示例输出:

     "IOPlatformUUID" = "9E134619-9999-9999-9999-90DC147C61A9"
    

    如果您想要人类可读的内容并且有人可以在“关于本机”的主对话框中找到技术支持电话,您也可以解析出“IOPlatformSerialNumber”而不是“IOPlatformUUID”...

    现在,如果您希望像在 MS DPAPI 中那样存储和保护信息,那么 KeyChain 就是这样做的地方(OSX/iOS)。 Mono 确实有一些基于 x-plat 的 DPAPI 加密 API。

    【讨论】:

    • 非常感谢。我正在使用 Xamarin Studio.. 我不明白什么是 xamarin.mac.. 它本身不是单声道。所以这个 IOPlatformUUID 将是唯一的,如果用户更改密码或其他内容,则不会更改。您也可以告诉我;哪个版本的 Mac 添加了这个。我不想根据版本不必要地限制应用安装。
    • 我相信 I/O Kit 和驱动程序完全是在 10.4(?) 中形成的,但您需要在 Apple 的 SDK 中升级以确认这一点,但 Mono 支持 OS-X 10.7+,所以您使用它会很好。我的理解是平台 ID 是稳定的并锁定在逻辑板上... XamMac 是一个 C# 库,它绑定了 Mac 接口并允许您使用本机对话框/窗口/等发布本机 .app... 在 OS- X,它是 Xamarin Studio 的可选平台,就像 iOS 或 Android 一样。在他们的网站上查看定价和许可,但每个开发者每月 25 美元起,就像移动平台的成本一样。
    • 谢谢,我会检查苹果 sdk。但由于 mono 仅支持 10.7 之后的 0SX 版本 mono-project.com/docs/about-mono/supported-platforms/osx 这不会有问题。我使用相同的东西,有一个免费版本的 xamarin。我设计 UI在 GTK 上并用 C# 编写代码。如果需要创建分发包,则需要购买 xamarin.mac。
    • 如果您只是为 GTK#/GTK2+ guis 编码,那么您可以避免使用 XamMac,除非您确实需要它提供的本机绑定并且不想使用您需要访问的 API 来扩展 MonoMac .
    • 我的应用程序现在在 Mac 上运行良好现在买 Xamarin.mac,网上有一些指南可以手动完成。希望它会起作用。你上面的代码需要 Xamarin.mac 吗??
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2022-12-05
    • 2010-11-21
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多