【问题标题】:Accessing folder information about clickonce application访问有关 clickonce 应用程序的文件夹信息
【发布时间】:2015-07-18 06:54:43
【问题描述】:

问题来了:

我有两个应用程序。其中一个是我无法访问的 clickonce 应用程序,另一个是我正在设计的 c# 程序。我需要一种方法来通过开始菜单中的 .appref-ms 文件或从该文件中找到的令牌 ID/名称来跟踪安装应用程序的应用程序文件夹。

这可能吗?有没有办法在 clickonce 商店中查询应用程序列表以及它们的安装位置?我发现的所有内容都是指打开进程列表并转到进程映像位置,但如果程序没有运行,这是不可能的。

【问题讨论】:

  • 也许这可以帮助您找到应用程序stackoverflow.com/questions/908850/…
  • 我不认为有一个简单的方法可以做到这一点,名称被设计混淆了。您可以搜索C:\Users\xxxx\AppData\Local\Apps\2.0 文件夹以查看子文件夹中的内容。

标签: c# clickonce


【解决方案1】:

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

【讨论】:

  • 出于好奇:此方法是系统范围的还是仅适用于当前用户?
【解决方案2】:

我不知道如何查询 ClickOnce 商店。

但正如@Vojtěch Dohnal 所说。所有 ClickOnce 应用程序都将存储在C:\Users\xxxx\AppData\Local\Apps\2.0

我们可以想象一个解决方案,它会为每个用户列出树中的所有可执行文件,并且只保存最后的版本。

这里是一个示例代码sn-p(单用户):

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);
    }
}

您会在应用程序字典中找到所有应用程序名称作为键,以及作为值的元组,其中包含可执行文件的完整路径及其版本。

没有找到其他获取信息的方法,但我希望它能完成这项工作

在我的电脑上试了一下,好像没问题

如果您知道您的应用程序名称,您可以通过这种方式获取最后安装版本的路径。

如果不知道但您知道.appref-ms 在哪里,则必须打开它,获取应用程序清单(ClickOnce 发布的.application 文件)并从assemblyIdentity 节点获取可执行文件名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多