2015-05-07 38 views
9

Oto problem:Dostęp do informacji o folderze na temat aplikacji clickonce

Mam dwie aplikacje. Jedną z nich jest aplikacja clickonce, do której nie mam dostępu, a druga to program C#, który projektuję. Potrzebuję sposobu na wyśledzenie folderu aplikacji, w którym zainstalowana jest aplikacja, za pomocą pliku .appref-ms w menu Start lub identyfikatora/nazwy tokena znalezionego w tym pliku.

Czy to możliwe? Czy istnieje sposób na zapytanie do magazynu clickonce o listę aplikacji i gdzie są zainstalowane? Wszystko, co znalazłem, dotyczy otwierania listy procesów i przechodzenia do lokalizacji obrazu procesu, ale nie jest to możliwe, jeśli program nie działa.

+0

Może to pomoże Ci znaleźć aplikację http://stackoverflow.com/questions/908850/get -instalowane-aplikacje-in-a-system – MrWombat

+0

Nie sądzę, że istnieje łatwy sposób na to, nazwy są zaciemnione przez projekt. Możesz wyszukać folder "C: \ Users \ xxxx \ AppData \ Local \ Apps \ 2.0", aby zobaczyć, co znajduje się w podfolderach. –

Odpowiedz

2

Nie wiem, jak wykonać zapytanie do sklepu ClickOnce.

Ale jak powiedział @ Vojtěch Dohnal. Wszystkie aplikacje ClickOnce będą przechowywane w C:\Users\xxxx\AppData\Local\Apps\2.0

Możemy sobie wyobrazić rozwiązanie, które dla każdego użytkownika będzie zawierało listę wszystkich plików wykonywalnych w drzewie i zapisywać tylko ostatnie wersje.

Oto urywek przykład kodu (jeden użytkownik):

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

Musisz znaleźć w aplikacjach słownika wszystkie aplikacje nazwiska jak klucze, i jako wartości krotki zawierający pełną ścieżkę dostępu do pliku wykonywalnego i to jest wersja.

Nie znaleźć inny sposób, aby uzyskać informacje, ale mam nadzieję, że to będzie wykonać zadanie

wypróbowane na moim komputerze i wydaje się działać prawidłowo

Jeśli znasz nazwę aplikacji, w ten sposób można uzyskać ścieżkę do ostatniej zainstalowanej wersji.

Jeśli nie, ale wiesz, gdzie .appref-ms jest, trzeba je otworzyć, pobrać aplikację oczywistego (plik .application opublikowane przez ClickOnce) i uzyskać nazwę pliku wykonywalnego z węzła assemblyIdentity.

4

przechowują dane ClickOnce w kluczu rejestru systemu Windows: klucz HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment

Registry z listy aplikacji: HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0\StateManager\Applications

+0

Z ciekawości: czy jest to metoda ogólnosystemowa, czy tylko dla bieżącego użytkownika? – Sidewinder94

Powiązane problemy