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?

È stato utile?

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.

http://www.pinvoke.net/default.aspx/shell32.findexecutable

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top