这是问题所在:
我有两个申请.其中一个是我无法访问的clickonce应用程序,另一个是我正在设计的ac#program.我需要一种方法来通过.appref-ms
开始菜单中的文件或从该文件中找到的令牌ID /名称来跟踪安装应用程序的应用程序文件夹.
这可能吗?有没有办法查询clickonce商店的应用程序列表及其安装位置?我找到的所有内容都是指打开进程列表并转到进程映像位置,但如果程序未运行,则无法执行此操作.
我不知道如何查询 ClickOnce 存储。
\n\n但正如 @Vojt\xc4\x9bch Dohnal 所说。所有 ClickOnce 应用程序将存储在C:\\Users\\xxxx\\AppData\\Local\\Apps\\2.0
我们可以想象一个解决方案,该解决方案将为每个用户列出树中的所有可执行文件,并且仅保存最后的版本。
\n\n这是一个示例代码片段(单用户):
\n\nvar exes = Directory.EnumerateFiles(@"C:\\Users\\<user>\\AppData\\Local\\Apps\\2.0", "*.exe",\n SearchOption.AllDirectories);\n\nvar apps = new Dictionary<String, Tuple<String, Version>>();\n\nforeach (var file in exes)\n{\n var fileName = Path.GetFileName(file);\n\n Version v = null;\n Version.TryParse(FileVersionInfo.GetVersionInfo(file).FileVersion, out v);\n\n if (fileName == null || v == null) continue;\n\n if (!apps.ContainsKey(fileName))\n {\n apps.Add(fileName, new Tuple<string, Version>(file, v)); \n }\n else if (v > apps[fileName].Item2)\n {\n apps[fileName] = new Tuple<string, Version>(file, v);\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n您将在应用程序字典中找到所有应用程序名称作为键,以及作为值的元组,其中包含可执行文件的完整路径及其版本。
\n\n没有找到其他方式来获取信息,但我希望它能完成这项工作
\n\n在我的电脑上尝试了一下,似乎运行良好
\n\n如果您知道应用程序名称,则可以通过这种方式获取最后安装版本的路径。
\n\n如果没有,但您知道它在哪里.appref-ms
,则必须打开它,获取应用程序清单(.application
ClickOnce 发布的文件)并从节点获取可执行文件名称assemblyIdentity
。