如何获取user.config路径中的哈希值?

2023-11-26

我已经安装了.NET应用程序。它的配置位置是

%AppData%\[CompanyName]\[ExeName]_Url_[hash]\[version]\user.config.

我需要得到[hash]来自另一个应用程序的值。

根据MSDN, user.config路径模板是

[c:\Documents and Settings]\[username]\[Local Settings]\Application Data\[companyname]\[appdomainname]_[eid]_[hash]\[version]

where [hash]是证据的 SHA1 哈希值(在我的例子中 eid=Url)。

我注意到以下几点:

  • [hash]随着应用程序安装路径的变化而变化。
  • [hash]始终为 32 个字符长,因此它不是 SHA1 的 40 个字符长的十六进制表示形式。看起来[hash]=base32(sha1([install path]))

我尝试过不同的值[install path]

c:\程序文件...
文件:///c:\程序文件....
文件:///c:\Program%20Files...等

but [hash]总是错的。


在经历了尝试计算程序的相同问题之后user.config(本地)路径,我决定用代码片段补充 @Gerard Sexton 的答案。以下方法是在假设[eid] equals "Url" and [appdomainname]是可执行文件名。

public string GetExeLocalAppDataUserConfigPath(string fullExePath)
{
    //E.g.: fullExePath = @"C:\Program Files (x86)\MyExeFolder\MyProgram.exe"
    var localAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

    var versionInfo = FileVersionInfo.GetVersionInfo(fullExePath);
    var companyName = versionInfo.CompanyName;
    var exeName = versionInfo.OriginalFilename;// or 'AppDomain.CurrentDomain.FriendlyName'

    var assemblyName = AssemblyName.GetAssemblyName(fullExePath);
    var version = assemblyName.Version.ToString();

    var uri = "file:///" + fullExePath; //or 'assemblyName.CodeBase' if vshost (you can check the 'FriendlyName')
    uri = uri.ToUpperInvariant();

    var ms = new MemoryStream();
    var bSer = new BinaryFormatter();
    bSer.Serialize(ms, uri);
    ms.Position = 0;
    var sha1 = new SHA1CryptoServiceProvider();
    var hash = sha1.ComputeHash(ms);
    var hashstring = ToBase32StringSuitableForDirName(hash);

    //<AppData Local User Path> + <Company Name> + <[ExeName]_[eid]_[Hash]> + <Version> + user.config
    var userConfigLocalAppDataPath = Path.Combine(localAppDataPath, companyName, exeName+"_Url_"+hashstring, version, "user.config");

    return userConfigLocalAppDataPath;
}

这是ToBase32StringSuitableForDirNameGerard 中发现的实现link!

static Char[] s_Base32Char = {
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
            'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
            'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 
            'y', 'z', '0', '1', '2', '3', '4', '5'};

private static string ToBase32StringSuitableForDirName(byte[] buff)
{
    StringBuilder sb = new StringBuilder();
    byte b0, b1, b2, b3, b4;
    int l, i;

    l = buff.Length;
    i = 0;

    // Create l chars using the last 5 bits of each byte.  
    // Consume 3 MSB bits 5 bytes at a time.

    do
    {
        b0 = (i < l) ? buff[i++] : (byte)0;
        b1 = (i < l) ? buff[i++] : (byte)0;
        b2 = (i < l) ? buff[i++] : (byte)0;
        b3 = (i < l) ? buff[i++] : (byte)0;
        b4 = (i < l) ? buff[i++] : (byte)0;

        // Consume the 5 Least significant bits of each byte
        sb.Append(s_Base32Char[b0 & 0x1F]);
        sb.Append(s_Base32Char[b1 & 0x1F]);
        sb.Append(s_Base32Char[b2 & 0x1F]);
        sb.Append(s_Base32Char[b3 & 0x1F]);
        sb.Append(s_Base32Char[b4 & 0x1F]);

        // Consume 3 MSB of b0, b1, MSB bits 6, 7 of b3, b4
        sb.Append(s_Base32Char[(
            ((b0 & 0xE0) >> 5) |
            ((b3 & 0x60) >> 2))]);

        sb.Append(s_Base32Char[(
            ((b1 & 0xE0) >> 5) |
            ((b4 & 0x60) >> 2))]);

        // Consume 3 MSB bits of b2, 1 MSB bit of b3, b4

        b2 >>= 5;

        if ((b3 & 0x80) != 0)
            b2 |= 0x08;
        if ((b4 & 0x80) != 0)
            b2 |= 0x10;

        sb.Append(s_Base32Char[b2]);

    } while (i < l);

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

如何获取user.config路径中的哈希值? 的相关文章

  • LINQ to XML - 如何正确使用 XDocument

    现在我首先要说的是 这确实是一项任务 然而 在我遇到 Linq to XML 语法之前 我几乎已经完成了它 我有 2 个课程 曲目和 CD 现在作为作业的一部分 我创建了一张 CD 然后向其中添加了一些曲目 在搜索了大量完美解释了如何从 x
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • .net 运行时 - Silverlight 运行时 =?

    我用 google 搜索了一下 但没能找到 net CLR 中的哪些类未包含在 CoreCLR 又名 Silverlight 中的详细列表 Windows net Framework 中缺少什么 Silverlight 另外 是否存在 Si
  • 我应该在单元测试中使用 AutoMapper 吗?

    我正在为 ASP NET MVC 控制器方法编写单元测试 这些控制器依赖于IMapper 我创建的用于抽象 AutoMapper 的接口 使用 Castle Windsor 通过构造函数注入传入 动作方法使用IMapper从领域对象映射到
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y

随机推荐

  • 如何检查 AWS Cognito 中是否已存在电子邮件?

    我正在使用 AWS Cognito 进行登录 注册 我们还有两步之遥 1 它会要求提供电子邮件 2 如果电子邮件已经存在 那么它会询问密码 否则它会说创建密码 此步骤上的按钮根据上述条件显示 无论是 登录 还是 注册 在用户输入电子邮件后
  • 沿坐标列表给出的路径向量化半正矢距离计算

    我有一个坐标列表 可以使用以下方法计算所有点之间的距离矩阵半正矢距离公制 坐标为numpy array形状的 n 2 of latitude longitude pairs 16 34576887 107 90942116 12 49474
  • 从 CreateAnonymousThread 更新 VCL 组件

    看来哪一个同步不能从使用创建的线程中使用创建匿名话题 所以问题是 How i can update a VCL component from inside of a Thread created using CreateAnonymousT
  • 非导出活动:在模拟器上启动;手机上的安全异常

    我有一个非出口活动在我的项目中 如果我尝试使用以下命令在手机上启动它adb adb shell am start n packagename activityname 我收到错误 java lang SecurityException Pe
  • 使用 PDO 准备好插入后获取最后一个插入 ID

    我在一个新项目中使用 PHP PDO 和 PostgreSQL 给定以下函数 如何返回刚刚插入的行的 id 它并不像现在看起来的那样工作 function adauga administrator detalii global db ult
  • PHP 中的语音识别?

    我正在寻找 PHP 中的语音识别 我有很多 wav 文件 10 15 秒 我希望语音识别能够识别每个 wav 文件中的 1 或 2 个单词 然后将其标记到数据库或 csv 所有文件都有相同的声音和口音 同一个人哈哈 伪代码示例 voice
  • Mono.Cecil:从其他程序集调用GENERIC基类的方法

    我正在跟进我之前的问题 Mono Cecil 从其他程序集中调用基类的方法 我正在做同样的事情 但如果我的基类是通用的 它就不起作用 in Assembly A class BaseVM
  • 从 Android 中的本地资源加载 jQuery 以用于远程 html 页面

    我正在尝试从 Android webview 读取存储在资产中的本地 javascript 文件 jQuery 我不想加载 with base url 因为我的图像和 html 是远程提供的 总结一下 将本地 jQuery 在资产文件夹中
  • AttributeError:未知属性 color_cycle

    我正在学习 pandas 并尝试绘制id列 但我收到错误AttributeError Unknown property color cycle和空图 该图仅出现在交互式 shell 中 当我作为脚本执行时 我得到相同的错误 除了图表没有出现
  • 使用 MSAL 的访问令牌/刷新令牌

    我对 OAuth2 以及 AccessToken 和 RefreshToken 的概念比较熟悉 使用 ClientApplicationBase AcquireTokenSilentAsync 时 MSAL 似乎正在为我们做一些工作 我不清
  • MVVM Light Messenger 多次执行

    我正在使用 MVVM Light 并使用消息在 ViewModel 之间进行通信 让 ViewModel 知道何时可以执行某些操作 我的问题是我注册了一条消息 然后它多次收到它 因此 为了防止我的程序多次执行某些操作 我必须创建布尔标志来查
  • 使用由明确定义的归纳定义的递归函数进行计算

    当我使用Function在 Coq 中定义一个非结构递归函数 当要求进行特定计算时 生成的对象会表现得很奇怪 事实上 不是直接给出结果 而是Eval compute in 指令返回一个相当长 通常为 170 000 行 的表达式 Coq 似
  • 打开带有空格的本地 Android 文件

    我正在尝试使用意图在 Android 4 0 中打开本地文件 以下是执行该操作的代码 只要文件没有特殊空格 例如 如果文件是 data data com xxxx yyyy files Downloads Documents Product
  • 什么是 kthreadd_task

    在kthread create的定义中 有一个任务被唤醒 有谁知道这个任务在做什么吗 struct task struct kthread create struct kthread create info create create th
  • java部分类

    小序言 我是 1 4 jdk 的优秀 java 开发人员 之后我切换到了另一个平台 但在这里我遇到了问题 所以问题是关于jdk 1 6 或更高版本 我有3个耦合类 耦合的本质与本机方法有关 波纹管是这 3 类的示例 public inter
  • 如何删除未使用的序列?

    我们正在使用 PostgreSQL 我的要求是从我的数据库中删除未使用的序列 例如 如果我通过应用程序创建任何表 则会创建一个序列 但为了删除该表 我们也不会删除该序列 如果想要创建相同的表 则正在创建另一个序列 示例 表 file 自动创
  • 我可以用 d3 附加文字 SVG 元素吗?

    我想用 d3 附加一个文字 SVG 元素 所以而不是写 svg selectAll circle data data enter append circle etc etc 我想做 svg selectAll circle data dat
  • iPhone 中收到警告:NSString 可能不会响应“-JSONValue”

    在我的 iPhone 应用程序中 我正在访问网络服务器以获取数据 这里我使用 JSON 从数据库中检索数据 我收到一条警告 NSString 可能不会响应 JSONValue 如何解决呢 添加这个 import JSON h 在你的顶部 m
  • Dagger2:如果没有 @Provides 注释的方法,则无法提供 ViewModel

    我正在遵循使用的架构Github浏览器示例由谷歌 但在建设项目的过程中却遇到了麻烦 我已经将项目迁移到AndroidX 我已经尝试了 StackOverflow 上的许多答案 但都没有成功 这是我在构建时遇到的构建异常 e windows
  • 如何获取user.config路径中的哈希值?

    我已经安装了 NET应用程序 它的配置位置是 AppData CompanyName ExeName Url hash version user config 我需要得到 hash 来自另一个应用程序的值 根据MSDN user confi