2015-05-07 14 views
9

Ecco il problema:Accesso alle informazioni sulla cartella sull'applicazione clickonce

Ho due applicazioni. Uno di questi è un'applicazione clickonce a cui non ho accesso e l'altro è un programma C# che sto progettando. Ho bisogno di un modo per rintracciare la cartella dell'applicazione in cui è installata l'app dal file .appref-ms nel menu di avvio o dall'ID/nome del token trovato all'interno di quel file.

È possibile? C'è un modo per interrogare lo store clickonce per un elenco di applicazioni e dove sono installate? Tutto ciò che ho trovato si riferisce all'apertura dell'elenco dei processi e alla posizione dell'immagine del processo, ma ciò non è possibile se il programma non è in esecuzione.

+0

Forse questo ti aiuta a trovare l'applicazione http://stackoverflow.com/questions/908850/get -installed-applications-in-a-system – MrWombat

+0

Non penso che ci sia un modo semplice per farlo, i nomi sono offuscati dalla progettazione. Puoi cercare la cartella 'C: \ Users \ xxxx \ AppData \ Local \ Apps \ 2.0' per vedere cosa c'è nelle sottocartelle. –

risposta

2

Non conosco un modo per interrogare il negozio ClickOnce.

Ma come ha detto @ Vojtěch Dohnal. Tutte le applicazioni ClickOnce verranno memorizzate in C:\Users\xxxx\AppData\Local\Apps\2.0

Si potrebbe immaginare una soluzione che, per ogni utente, elenca tutti i file eseguibili nell'albero e salva solo le ultime versioni.

Ecco un frammento di codice di esempio (singolo utente):

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

Troverete nelle applicazioni dizionario tutte le applicazioni nome dei tasti, e come valori di una tupla contenente il percorso completo del file eseguibile e è la versione.

Non hai trovato un altro modo per ottenere le informazioni, ma spero che farà il lavoro

provato sul mio computer e sembra funzionare bene

Se si conosce il nome dell'applicazione, è può in questo modo ottenere il percorso dell'ultima versione installata.

caso contrario ma si sa dove il .appref-ms è, dovrete aprirla, ottenere il manifesto dell'applicazione (il file .application pubblicato da ClickOnce) e ottenere il nome del file eseguibile dal nodo assemblyIdentity.

4

memorizzare i dati ClickOnce in chiave di registro di Windows: tasto HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment

Registro con elenco delle applicazioni: HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0\StateManager\Applications

+0

Per curiosità: questo metodo è valido per tutto il sistema o solo per l'utente corrente? – Sidewinder94