Script per associare un'estensione a un programma
-
03-07-2019 - |
Domanda
Il mio cliente sta sostituendo MS Office con OpenOffice in alcune workstation. Il mio programma esporta un file in Excel usando l'estensione .xml (usando il formato aperto) e lo apre usando l'attuale programma associato (usando ShellExecute)
Il problema è che OpenOffice non registra l'estensione .xml ad esso associata.
L'associazione manuale funziona bene, ma voglio creare un .reg o qualcosa per cambiare facilmente l'impostazione.
Sto cercando nel registro in un PC con la modifica già apportata, ma
"HKEY_CLASSES_ROOT\.xml"
La chiave non ha nulla che faccia riferimento a OpenOffice.
Dove è archiviata l'associazione? Come posso creare uno script per fare il lavoro?
Soluzione
La vera associazione è memorizzata nella chiave che " HKEY_CLASSES_ROOT \ .xml "
punta a.
Sulla mia macchina, il valore predefinito di quella chiave dice " xmlfile "
, molto probabilmente è lo stesso per il tuo.
Quindi andiamo a " HKEY_CLASSES_ROOT \ xmlfile "
. Lì puoi vedere (e cambiare) quale comando verrà utilizzato per avviare quel tipo di file:
HKEY_CLASSES_ROOT\xmlfile\shell\open\command
Windows utilizza questo tipo di reindirizzamento per mappare più estensioni di file sullo stesso tipo di file e quindi sulla stessa applicazione.
In " HKEY_CLASSES_ROOT \ xmlfile \ shell "
ci sono più sottochiavi che assomigliano ai " verbi " di cosa puoi fare al file. Ancora una volta, il valore predefinito della chiave " shell "
decide quale di questi verbi viene utilizzato se si fa doppio clic sul file. Nel mio caso si tratta di " open "
.
Conclusione:
Con questa conoscenza, il modo più semplice per rendere scriptabile un'associazione è usare regedit per esportare un file .reg contenente quella modifica e applicarlo al computer di destinazione con un doppio clic o:
regedit /s new_xml_association.reg
o (se sei su XP o superiore e sai cosa fai) sovrascrivi il valore corrente con:
reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"
Ad ogni modo, è consigliato uno sguardo più approfondito al comando reg add /?
. La prima soluzione è più sicura.
Altri suggerimenti
considera il comando dos assoc
:
C: > assoc /? Visualizza o modifica l'estensione del file Associazioni
ASSOC [.ext [= [fileType]]]
.ext Specifica il file estensione per associare il tipo di file con fileType Specifica il file digitare da associare al file estensione
Digitare ASSOC senza parametri su visualizza le associazioni di file correnti. Se ASSOC viene richiamato con solo un file estensione, visualizza la corrente associazione di file per quel file estensione. Non specificare nulla per il tipo di file e il comando verrà eliminato l'associazione per il file estensione.
L'uso di associazioni di file in questo caso sembra la cosa sbagliata da fare. Tu vuoi che la tua applicazione apra il file in OpenOffice ma cosa succede se il tuo utente desidera lasciare intatta l'associazione di file per i file XML? E se qualcos'altro sul loro sistema si basa anche su quell'associazione? In questo caso stai rompendo il loro sistema. Se sei la persona IT allora forse è OK (pratica di programmazione ancora discutibile), ma in caso contrario questa è una brutta cosa da fare.
Utilizzare invece l'implementazione COM di OpenOffice per aprire il file.
Un buon esempio semplice qui: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html
Mi sono appena imbattuto in questo mentre cercavo la stessa risposta. Ho trovato una soluzione migliore utilizzando l'API FindExecutable di Windows, che può essere utilizzata da C # utilizzando PInvoke.