使用 C#(Mono) 在 Mac 上获取唯一系统 ID

2023-12-09

我使用 Mono 为 Mac 移植一个 Windows 应用程序。我无法在 Mac 中使用 DPAPI,并且我认为在 Mac 中为用户级程序获取主板/CPU id 存在限制。那么 Windows 中是否有类似 DPAPI 的东西我可以使用 Mono 来使用获取一个不会改变的唯一系统ID。


首先,远离使用 MAC 地址,因为这些地址可能会更改(欺骗或硬件更改),并且自 10.3/4 以来这不是一种非常 Mac'ie 的方式?...从那时起,“I/O Kit 注册表”是首选方法获取系统 ID。拖放到命令行并man ioreg对于相同的细节。

所以,不确定您是否使用 Xamarin.Mac,所以如果您are您可以绑定 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C#(Mono) 在 Mac 上获取唯一系统 ID 的相关文章

  • TypeAccessException:尝试通过方法...访问类型...失败

    完整的异常详细信息是 System TypeAccessException occurred Message Attempt by method DynamicClass System Text StringBuilder System O
  • TestMethod:异步任务 TestSth() 不适用于 .NET 4.0

    我正在尝试使用 NET 4 0 BCL Async 和 MsTest 运行异步测试方法 看来这个设置不能处理 测试方法 异步Task测试Sth 由于测试用例资源管理器中缺少条目 将签名更改为异步后void 我可以运行测试用例 但结果错误 根
  • 当我尝试使用 AVX 功能时,Clang 生成错误

    我使用的是 Windows 10 使用 Clang 版本 5 最近安装 当我编译以下内容时 define AVX define AVX2 include
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • .NET 程序集大小会影响性能吗?

    net 程序集的大小是否会影响性能 您的 Windows 窗体 Web 窗体项目中的程序集数量如何 来自微软的模式和实践提高 NET 应用程序性能和可扩展性 http msdn microsoft com en us library ms9
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • 使用正则表达式匹配以“Id”结尾的单词?

    如何组合一个正则表达式来匹配以 Id 结尾的单词并进行区分大小写的匹配 试试这个正则表达式 w Id b w 允许前面的单词字符Id和 b确保Id位于单词末尾 b是字边界断言
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • C++ 析构函数:何时释放内存?

    如果我删除一个导致其析构函数被调用的对象 那么内存是在析构函数完成函数中的任何操作之前还是之后被释放 仅当最小派生类子对象被销毁后才会释放内存 所以如果你有 class Base class Derived public Base publ
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • 使 C# 编译器相信执行将在成员返回后停止

    我认为目前这是不可能的 或者这是否是一个好主意 但这是我刚才正在考虑的事情 我使用 MSTest 对我的 C 项目进行单元测试 在我的一项测试中 我执行以下操作 MyClass instance try instance getValue
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • C 中的静态和动态绑定(严格来说是 C,而不是 C++)是什么?

    我最初对发布这个问题感到担忧 以免它重复 但即使在谷歌搜索了许多关键字之后 我在 StackOverflow 上找不到任何解释 C 的静态和动态绑定的链接 尽管有 C 的问题和答案 但是都涉及classes以及显然不适合 C 的东西 Sta
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3
  • Crypto++ 和压缩 EC 密钥

    如何在 Crypto 中生成压缩的 ECDSA 密钥 AutoSeededRandomPool prng ECDSA
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • git jenkins 中未找到存储库

    我正在使用 jenkins 2 64 并安装了最新的插件 我试图在 jenkins 中设置 git 存储库并给出凭据 但给出错误无法连接存储库 状态代码为 128 Cloning repository https github com so
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • R 中 apply 中的 equal() 行为

    这很奇怪 apply matrix c 1 NA 2 3 NA NA 2 4 ncol 2 1 function x identical x 1 x 2 1 FALSE TRUE TRUE FALSE apply data frame a
  • 在这种情况下,iPhone 上的“发布”是什么意思?

    我想问一个关于 iPhone 应用程序的愚蠢问题 我是iPhone应用程序的绿色 我在Apple网站上阅读了以下代码 MyViewController aViewController MyViewController alloc initW
  • 设计模式 - 理解外观模式

    我是设计模式的新手 正在尝试了解它们通常的样子 现在我正在尝试理解外观模式 我觉得外观模式是一个相当广泛的概念 所以我想知道我的第二个图是否会被视为外观模板的一部分 我知道一个典型的外观模式基本上是这样的 A 级是外观 但是如果我们有一个更
  • 密钥不得包含 . pymongo 中的错误

    我试图通过 pymongo 获取 serverStatus 命令的输出 然后将其插入到 mongodb 集合中 这是字典 u metrics u getLastError u wtime u num 0 u totalMillis 0 u
  • PHP Constant() 不适用于名称空间?

    以下不起作用 use application components auditor AuditLevel public function actionAudit data unserialize POST data message data
  • 如何更新由另一个组合框触发的组合框中的值?

    我的表单中有 2 个组合框 我希望在组合框 2 中的列表更新时更改组合框 1 中的选定值 例如 ComboBox1 包含移动公司的名称 ComboBox2 包含该公司的所有手机列表 假设您有一个将手机型号与其制造商关联起来的字典 Dicti
  • 流星:云中

    我正在尝试上传 Lepozepo cloudinary 的照片 这是我的服务器和客户端配置 server Cloudinary config cloud name api key api secret client cloudinary c
  • UIViewController 的背景到分组表视图颜色

    在 UITableView 分组样式中 表格视图的背景有点像浅灰色的纹理颜色 如何获取该值以便将 UIViewController 的整个背景设置为该颜色 如果您正在为 iPhone 和 iPod touch 进 行开发 UIColor定义
  • 搜索文本文件并插入行

    我想要做的是 以下面的文本为例 在文本文件中搜索字符串 Text2 然后在 Text 2 后两行插入一行 插入文本 文本 2 可以位于文本文件中的任何行 但我知道它会在文本文件中出现一次 所以这是原始文件 Text1 Text2 Text3
  • 从存档导出 ipa 时 Xcode 9 崩溃

    我在 Xcode 9 中为任何项目创建了一个存档 然后我尝试创建一个 ipa 文件 开发文件或临时文件 我首先尝试导出存档 然后我选择 开发 或 临时分发 Xcode 9 崩溃 我什至在应用程序的 info plist 中添加了 编译位码
  • 向函数发送 stderr/stdout 消息并捕获退出信号

    我正在处理错误处理并登录我的 bash 脚本 下面我提供了一个简化的代码片段来举例说明用例 我想在我的脚本中实现以下目标 陷阱退出信号应触发下面代码中的 onexit 函数 stderr 和 stdout 应发送到 log 函数 该函数将确
  • R 中的嵌套 if-else 循环

    我有一个名为 crimes 的数据框 其中包含一个 pre rate 列 表示实施特定法律之前的犯罪率 我想使用嵌套的 if else 循环将每个费率放入 rate category 列中 我有以下代码 crimes rate catego
  • 为什么c++使用memset(addr,0,sizeof(T))来构造一个对象?标准或编译器错误?

    这个问题和我的另一篇文章有 关 为什么 allocate shared 和 make shared 这么慢 在这里我可以更清楚地描述这个问题 考虑下面的代码 struct A char data 0x10000 class C public
  • 在多个 UIView 上添加 Facebook Shimmer

    我正在尝试在具有多个 UIView 的 UICollectionViewCell 上添加 Facebook Shimmer For 一个 UIView 使用下面的代码可以正常工作 let shimmeringView FBShimmerin
  • 执行存储在数据库中的Java代码

    我有定期推送到数据库的 Java 代码 解释它为什么在数据库中太复杂 这只会将焦点从主要问题上移开 在运行时我查询数据库 我可以执行从数据库获取的代码吗 我只将 main 方法的内容存储在代码中 运行数据库的服务器是HTTP 服务器 数据库
  • Apache Flink:Python 流 API 中的 Kafka 连接器,“无法加载用户类”

    我正在尝试 Flink 的新 Python 流 API 并尝试使用以下命令运行我的脚本 flink 1 6 1 bin pyflink stream sh examples read from kafka py python 脚本相当简单
  • Microsoft JScript 运行时错误:对象预期代码 800A13F

    我刚刚开始学习和培训node js 我已经安装了 Node js 版本 2 14 7 64 位 然后 我正在编写代码来制作基本服务器 var sys require sys my http require http my http crea
  • MySQL基于列值的内连接表

    假设我有一个具有以下结构的表 stats tableName id pageViews tableName 列对应于数据库中的单独表 当针对 stats 运行查询时 针对 stats 进行内部联接的最佳方法是什么 tableName列结果来
  • 如何加载独立于数据的 UI

    我正在网络服务器中使用 C 和数据库创建一个应用程序 从网络服务器访问数据时 速度非常慢 并且表单也会挂起 直到加载数据 有没有办法先加载表单 然后再加载数据 解决这个问题的常用方法是使用BackgroundWorker class pub
  • 使用 C#(Mono) 在 Mac 上获取唯一系统 ID

    我使用 Mono 为 Mac 移植一个 Windows 应用程序 我无法在 Mac 中使用 DPAPI 并且我认为在 Mac 中为用户级程序获取主板 CPU id 存在限制 那么 Windows 中是否有类似 DPAPI 的东西我可以使用