Associazione tipo file con l’applicazione (C #)

Ho alcune domande correlate:

1) È ansible rendere il mio programma cambiare l’associazione del tipo di file ma solo quando è in esecuzione? Vedi qualcosa di sbagliato in questo comportamento?

2) L’altra opzione che sto vedendo è lasciare che gli utenti decidano di aprire con la mia applicazione o ripristinare l’associazione predefinita … qualcosa come: “cattura tutti i file .lala” o “ripristina l’associazione .lala”. Come posso fare questo? Quale pensi che sia l’approccio migliore?

Per quanto riguarda le associazioni di file, ho già scritto una risposta che copre almeno il “come” .

Questo dovrebbe anche indicare la giusta direzione su come gestire il backup e il ripristino. Con l’accesso diretto al registro tramite c #, non sarà necessario utilizzare i file .reg, quindi sei libero di eseguire il backup del valore precedente come preferisci nella tua app, e anche di ripristinarlo da lì.

La domanda chiave qui è: dovresti cambiare le associazioni di file casualmente? Sarebbe ovviamente necessario chiedere almeno all’utente in anticipo (come hai anche indicato).

Inoltre, gli utenti Vista con UAC abilitato o gli utenti non privilegiati di altre versioni di Windows potrebbero non disporre dell’authorization necessaria per modificare le associazioni di file globali. La procedura di (dis) installazione del tuo programma potrebbe essere l’unico posto dove questo può avere successo.

MODIFICARE

Come Franci Penov ha indicato nella sua risposta , c’è un modo per cambiare le associazioni di file locali per utente, anche per i non amministratori (è per questo che ho parlato di “associazioni globali” nel paragrafo precedente). Ha anche menzionato il fatto che andare lì non è eccessivamente consigliabile.

È ansible implementare una modifica dell’associazione di file “al volo” associando un piccolo file eseguibile con quell’estensione di file che all’avvio controllerà se l’applicazione principale è in esecuzione e passerà il nome del file o se non è in esecuzione invocherà il ” regolare “applicazione associata.

Il vantaggio principale di questo approccio è che è necessario eliminare il registro solo una volta.

I principali svantaggi di questo approccio sono:

  • hai bisogno di un processo di supporto
  • l’applicazione che “possiede” queste estensioni di file può rilevare la modifica e lamentarsi per l’utente, richiedendo “riparazione” e così ottenere l’uscita dall’immagine.

In alternativa, è ansible modificare l’associazione dei file all’avvio del programma principale. Funzionerà anche per gli utenti non amministratori. mentre le associazioni di file sono memorizzate in HKEY_CLASSES_ROOT , c’è un piccolo trucco: HKCR è in realtà una mappa di entrambe le HKEY_LOCAL_MACHINE\SOFTWARE\Classes e HKEY_CURRENT_USER\SOFTWARE\Classes . Pertanto, è ansible registrare temporaneamente l’estensione del file per l’utente corrente in HKCU e “ombreggiare” l’associazione originale da HKLM.

Naturalmente, vorrei sconsigliare questo approccio, dato che basta un crash nella tua applicazione per rendere permanente quell’associazione e dal momento che pochissime applicazioni sanno come gestire le associazioni di file in HKCU, è probabile che sarà una situazione irrecuperabile per l’applicazione originale.

Probabilmente può essere fatto, ma penso che finirebbe per essere ingombrante. Tutte le associazioni dei tipi di file sono archiviate nel registro in modo da dover scrivere / ripristinare le voci di registro ogni volta che l’app si avvia e si arresta. Inoltre, a seconda della frequenza con cui lo fai, le nuove associazioni potrebbero non essere rilevate immediatamente in Esplora risorse di Windows.

Le associazioni sono elencate in HKEY_CLASSES_ROOT nel registro e possono essere mappate in tutta una miriade di modi (tipi di mime / progID / etc).

Molte app che ho visto chiedono se si desidera associare determinati tipi di file con l’applicazione durante il periodo di installazione e offrire la possibilità di distriggersre e lasciare le impostazioni correnti.

Non penso di raccomandare associazioni di tipi di file “al volo”

1) è ansible definire i tipi di file presenti nell’elenco a discesa del tipo di file Open Dialog. Al di fuori di questo, è ansible modificare il tipo di file predefinito sull’applicazione aperta e quindi sostituire durante la chiusura dell’applicazione, poiché l’associazione del tipo di file è solo un’impostazione del Registro di sistema.

Per quanto riguarda il torto, non lo farei. La prima ragione è che non è il comportamento standard delle applicazioni. La seconda ragione è che se l’applicazione o il PC si chiudono inaspettatamente, si rischia di non restituire l’associazione alle impostazioni originali.

2) Windows di default consente all’utente di scegliere queste opzioni utilizzando il tasto destro del mouse e il comando “apri con”.