Я не знаю способа запроса в хранилище ClickOnce.
Но как @ Vojtěch Dohnal сказал. Все приложения 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
, вы будете иметь, чтобы открыть его, получить манифест приложения (файл .application
опубликованных ClickOnce) и получить имя исполняемого файла из assemblyIdentity
узла.
Может быть, это поможет вам найти применение http://stackoverflow.com/questions/908850/get -installed-applications-in-a-system – MrWombat
Я не думаю, что есть простой способ сделать это, имена запутаны по дизайну. Вы можете найти папку 'C: \ Users \ xxxx \ AppData \ Local \ Apps \ 2.0', чтобы узнать, что находится в подпапках. –