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

时间:2015-05-07 15:28:10

标签: c# clickonce

问题在于:

我有两个申请。其中一个是我无法访问的clickonce应用程序,另一个是我正在设计的c#程序。我需要一种方法来通过开始菜单中的SELECT qryMinRateAll.[Origin City], qryMinRateAll.[Origin State], qryMinRateAll.[Destination City], qryMinRateAll.[Destination State], RateandTransit.SCAC, qryMinRateAll.MinRate, qryMinRateAll.[Lane Tier] FROM qryMinRateAll INNER JOIN RateandTransit ON (qryMinRateAll.[Destination City] = RateandTransit.[Destination City]) AND (qryMinRateAll.[Origin City] = RateandTransit.[Origin City]); 文件或从该文件中找到的令牌ID /名称来跟踪安装应用程序的应用程序文件夹。

这可能吗?有没有办法查询clickonce商店的应用程序列表及其安装位置?我发现的所有内容都是打开进程列表并转到进程映像位置,但如果程序没有运行则无法进行此操作。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我不知道如何查询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);
    }
}

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

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

在我的电脑上试过,似乎工作正常

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

如果没有,但您知道.appref-ms的位置,则必须打开它,获取应用程序清单(ClickOnce发布的.application文件)并从{{获取可执行文件名称1}} node。