[英]Accessing folder information about clickonce application
这是问题所在:
我有两个应用程序。 其中一个是我无法访问的clickonce应用程序,另一个是我正在设计的ac#程序。 我需要一种通过开始菜单中的.appref-ms
文件或从该文件中找到的令牌ID /名称来跟踪应用程序安装位置的应用程序文件夹的方法。
这可能吗? 是否可以查询clickonce商店以获取应用程序列表以及它们的安装位置? 我发现的所有内容都涉及打开过程列表并转到过程映像位置,但是如果程序未运行,则无法实现。
ClickOnce将数据存储在Windows注册表项中: HKEY_CURRENT_USER\\Software\\Classes\\Software\\Microsoft\\Windows\\CurrentVersion\\Deployment
带有应用程序列表的注册表项: HKEY_CURRENT_USER\\Software\\Classes\\Software\\Microsoft\\Windows\\CurrentVersion\\Deployment\\SideBySide\\2.0\\StateManager\\Applications
我不知道查询ClickOnce商店的方法。
但是正如@VojtěchDohnal所说。 所有ClickOnce应用程序将存储在C:\\Users\\xxxx\\AppData\\Local\\Apps\\2.0
我们可以想象一个解决方案,该解决方案将为每个用户列出树中的所有可执行文件,并仅保存最新版本。
这是一个示例代码片段(单个用户):
var exes = Directory.EnumerateFiles(@"C:\Users\<user>\AppData\Local\Apps\2.0", "*.exe",
SearchOption.AllDirectories);
var apps = new Dictionary<String, Tuple<String, Version>>();
foreach (var file in exes)
{
var fileName = Path.GetFileName(file);
Version v = null;
Version.TryParse(FileVersionInfo.GetVersionInfo(file).FileVersion, out v);
if (fileName == null || v == null) continue;
if (!apps.ContainsKey(fileName))
{
apps.Add(fileName, new Tuple<string, Version>(file, v));
}
else if (v > apps[fileName].Item2)
{
apps[fileName] = new Tuple<string, Version>(file, v);
}
}
您会在apps字典中找到所有应用程序名称作为键,并以值的形式找到一个Tuple,其中包含可执行文件及其版本的完整路径。
没有找到获取信息的另一种方法,但我希望它能胜任
在我的计算机上尝试过,似乎可以正常工作
如果知道您的应用程序名称,则可以通过这种方式获取上次安装版本的路径。
如果不是,但您知道.appref-ms
在哪里,则必须将其打开,获取应用程序清单(由ClickOnce发布的.application
文件),并从assemblyIdentity
节点获取可执行文件名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.