繁体   English   中英

访问有关clickonce应用程序的文件夹信息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM